저는 SpringFramework를 사용하여 웹 애플리케이션을 구축하고 있습니다. 데이터 액세스 레이어에서 Hibernate를 사용하여 MySQL에서 데이터를 쿼리했습니다.이 데이터는 정상적으로 작동합니다.Hibernate와 JPA를 사용하여 EntityManagerFactory 빌드하기
@Bean
public EntityManagerFactory entityManagerFactory() throws HibernateException {
return new org.hibernate.cfg.Configuration()
.configure()
.buildSessionFactory();
}
: IMO I는 다음에 위의 코드를 변경해야,
public SessionFactory sessionFactory() throws HibernateException {
return new org.hibernate.cfg.Configuration()
.configure()
.buildSessionFactory();
}
오늘은 EntityManagerFactory
을 필요로 JPA, 내 데이터 액세스를 통합하는거야 : 내 SessionFactory
이 방법에서 구축이다
SessionFactory
이 EntityManagerFactory
으로 확장되기 때문입니다. 그러나 나는 예외를 가지고
java.lang.ClassCastException가 : org.hibernate.internal.SessionFactoryImpl이 캐스트 할 수없는 javax.persistence.EntityManagerFactory
SessionFactoryImpl
이 SessionFactory
를 구현하기 때문에, 아주 이상한 SessionFactory
은 EntityManagerFactory
까지 확장됩니다. 왜 캐스팅이 실패하는지 나는 모른다.
제 질문은 : 1. 캐스트가 유효하지 않은 이유는 무엇입니까? 2. Hibernate를 사용하여 EntityManagerFactory
을 빌드하는 올바른 방법은 무엇입니까?
편집 디버거
factory instanceof SessionFactory //true
factory instanceof EntityManagerFactory //false
나는 위의 모든 EntityManagerFactory
이 javax.persistence.EntityManagerFactory
을 의미 확신 SessionFactory
public interface SessionFactory extends EntityManagerFactory, HibernateEntityManagerFactory, Referenceable, Serializable, Closeable
의 소스를 말한다.
왜 그렇게 복잡한 이유가 있을까요? 왜 @PersistenceContext 어노테이션을 사용하여 bean에 entityManager를 주입하지 않습니까? – wallenborn
@wallenborn Java (스프링 프레임 워크는 물론)를 처음 접했을 때 가장 좋은 방법이 무엇인지 알지 못합니다. 내 "오래된 코드"가'SessionFactory'를 제공하기 때문에, 나의 첫 번째 아이디어는 그것을 다시 사용하고있다. –