2015-03-24 38 views
5

Tôi đang cố gắng truy cập vào nhà máy phiên Hibernate nhưng tôi nhận được lỗi sau tại dòng được đề cập.Truy cập SessionFactory từ Ứng dụng Khởi động Mùa xuân

No CurrentSessionContext configured! 

đang

@Service 
@Transactional 
public class GenericSearchImpl implements GenericSearch { 

    @Autowired 
    private EntityManagerFactory entityManagerFactory; 

    @Override 
    @SuppressWarnings("unchecked") 
    public <T> List<T> search(final Class<T> type, final String[] criteriaList, final int page, final int perPage) { 
     Session session = getSession(); 
     ... 
    } 

    public Session getSession() { 
     final HibernateEntityManagerFactory emFactory = (HibernateEntityManagerFactory) entityManagerFactory; 
     final SessionFactory sessionFactory = emFactory.getSessionFactory(); 
     return sessionFactory.getCurrentSession(); //ERROR No CurrentSessionContext configured! 

      //This worked but I understand it to be BAD as spring should be managing open sessions. 
      //  try { 
      //   return sessionFactory.getCurrentSession(); 
      //  } catch (Exception e) { 
      //   return sessionFactory.openSession(); 
      //  } 
    } 

    ... 

} 

Bất cứ ý tưởng tại sao?

+0

JPA không sử dụng lớp 'CurrentSessionContext'. Cấu hình nó sẽ giải quyết vấn đề của bạn. Chỉ cần thêm cấu hình cho ngữ cảnh phiên hiện tại và để nó trỏ đến lớp 'org.springframework.orm.hibernate4.SpringSessionContext'. Tuy nhiên tại sao bạn lại thử điều này? Tại sao không sử dụng JPA đơn giản? –

+0

@ M.Deinum Tôi đang làm điều này để hỗ trợ một số mã di sản đang sử dụng Tiêu chí Hibernate. Nó cuối cùng sẽ được chuyển đổi sang JPA. Phần còn lại của ứng dụng đang sử dụng spring-data-jpa, tôi chỉ cần tạm thời Hibernate SessionFactory cho đến khi nó có thể được viết lại. Liệu một phương pháp lai giống như công việc này? Bạn có thể đưa ra một ví dụ về cấu hình CurrentSessionContext như một bean mùa xuân trong cấu hình java? – jax

+0

Có phải [this] (http://stackoverflow.com/questions/26667910/no-currentsessioncontext-configured?answertab=active#tab-top) ý của bạn là gì? – jax

Trả lời

7

Trong tập tin bất động sản,

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 

trong lớp cấu hình

@Bean 
public HibernateJpaSessionFactoryBean sessionFactory() { 
    return new HibernateJpaSessionFactoryBean(); 
} 

Sau đó, bạn có thể autowire

@Autowired 
private SessionFactory sessionFactory; 

Chúng tôi làm điều này như khởi động mùa xuân không tự động cấu hình ngủ đông sessinoFactory.

+0

thxx, đã giúp rất nhiều – Janiiik

1

Bạn có thể truy cập vào SessionFactory với phương pháp Unwrap entityManagerFactory thay vì HibernateJpaSessionFactoryBean

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class); 

HibernateJpaSessionFactoryBean bị phản đối trong mùa xuân Boot 1.5.8

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