2012-02-28 35 views
37

Tôi muốn nhận kết nối jdbc từ phiên ngủ đông.There là phương thức bên trong phiên ngủ đông tức là session.connection(); nhưng nó đã không được chấp nhận. tôi biết điều này làm việc vẫn còn nhưng tôi không muốn sử dụng phương pháp không được chấp nhận như tôi chắc chắn họ phải có cung cấp một số thay thế cho điều này? Tại http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html phương thức kết nối api nói sử dụng org.hibernate.jdbc.Work cho mục đích này nhưng tôi không tìm thấy bất kỳ ví dụ nào về điều đó?Cách nhận kết nối jdbc từ phiên ngủ đông?

+2

Nếu có ai đánh dấu một câu hỏi như là một bản sao xin vui lòng bao gồm một liên kết đến một trong những câu hỏi khác mà đã có một câu trả lời, –

Trả lời

74

Đây là cách bạn có thể sử dụng nó:

session.doWork(new Work() { 
    @Override 
    public void execute(Connection connection) throws SQLException { 
     //connection, finally! 
    } 
}); 
+0

Câu hỏi: Tôi nhận được ' doWork không hợp lệ nếu không có giao dịch hoạt động' với mã này, làm thế nào để tôi bắt đầu một giao dịch? – OscarRyz

+2

@OscarRyz: nếu bạn đang sử dụng Spring, '@ Transactional' hoặc' TransactionTemplate' là đủ. Trong nguyên Hibernate bạn phải [chạy 'session.beginTransaction()' thủ công] (http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html#transactions-basics). –

+0

Hi Buddy .. Câu trả lời hay nhưng doWork() cũng không còn được dùng nữa. – Logicalj

11

Tôi đã có một vấn đề tương tự và tôi đã sử dụng lớp ConnectionProvider để có được kết nối. Xem giải pháp của tôi:

Session session = entityManager.unwrap(Session.class); 
SessionFactoryImplementor sessionFactoryImplementation = (SessionFactoryImplementor) session.getSessionFactory(); 
ConnectionProvider connectionProvider = sessionFactoryImplementation.getConnectionProvider(); 
try { 
     connection = connectionProvider.getConnection(); 
     ... 
} 
+1

Bạn có thể thêm một giải thích ngắn gọn về cách giải quyết vấn đề này? – Ren

+4

sessionFactoryImplementation.getConnectionProvider() là depricated – vels4j

21

Hãy thử điều này:

((SessionImpl)getSession()).connection() 
+6

Đối với bất kỳ ai nhận được ở đây không có sẵn (giống như tôi): ['Session.connection'] (http://docs.jboss.org/hibernate/core/3.5/api/org/ phương thức hibernate/Session.html # connection% 28% 29) hiện không được chấp nhận. – Dinei

+2

không bao giờ truyền tới Impl! nội bộ của nó! (org.hibernate.internal.SessionImpl). Và bạn không thể kiểm tra mã này bằng một mô hình nữa. Điều này là xấu vì nhiều lý do. – Rainer

Các vấn đề liên quan