Hibernate 5: 통합 중 "알 수 없는 엔터티" 오류 해결
Hibernate 5.0을 MySQL과 통합하려고 시도하는 동안 많은 개발자가 오류 메시지를 접하게 됩니다. "org.hibernate.MappingException: 알 수 없는 엔터티." 이 문제는 특히 Hibernate 버전 5.0.0 및 5.0.1에서 발생하지만 4.3.9와 같은 이전 버전은 올바르게 작동합니다.
문제 정의
"알 수 없는 엔터티 " 오류는 Hibernate가 엔터티로 주석이 달린 클래스를 인식할 수 없을 때 발생합니다. 이는 클래스에 대한 매핑 메타데이터가 제대로 구성되지 않았거나 Hibernate 구성에 추가되지 않은 경우 발생할 수 있습니다.
구성 세부 정보
제공된 Maven 종속성 및 hibernate.cfg. xml 구성이 올바른 것 같습니다. User 클래스도 엔터티로 주석이 추가되어 데이터베이스 테이블 "User_table"에 매핑되었습니다.
원인 및 해결 방법
이 문제의 근본 원인은 다음과 같습니다. HibernateMain 클래스에 SessionFactory를 생성하는 과정. Hibernate 5에서는 다음 코드를 사용하여 SessionFactory를 구성하고 빌드합니다.
Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings( configuration.getProperties()).build(); SessionFactory sf = configuration.buildSessionFactory(sr);
Hibernate 5에서 Configuration.buildSessionFactory(sr)를 사용하면 구성이 호출하여 얻은 매핑 정보를 잃게 되기 때문에 문제가 발생합니다. 구성.구성(). 결과적으로 Hibernate는 User 클래스를 주석이 달린 엔터티로 인식할 수 없습니다.
해결 방법
이 문제를 해결하려면 두 가지 접근 방식이 있습니다.
표준 구성 파일(hibernate.cfg.xml 및 hibernate.properties)
표준 구성 파일을 사용하는 경우 ServiceRegistry를 사용하지 않고 SessionFactory를 생성할 수 있습니다.
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
속성 로드
별도의 파일에 속성이 있는 경우 해당 속성을 로드하고 SessionFactory를 빌드할 수 있습니다. StandardServiceRegistryBuilder 사용.
속성을 리소스로 로드
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). configure().loadProperties("hibernate-h2.properties").build(); SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
경로에서 속성 로드
File propertiesPath = new File("some_path"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). configure().loadProperties(propertiesPath).build(); SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
추가 참고
위 내용은 Hibernate 5 '알 수 없는 엔터티' 오류: 엔터티 매핑을 위해 SessionFactory를 올바르게 구성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!