2011-11-14 3 views
0

저는 프로 바이더로서 hibernate를 가진 jpa2에 의해 매핑 된 ~ 10 개의 클래스들로 구성된 작은 스키마를 가지고 있습니다. 모든 수업은 동일한 기본 방식으로 이루어집니다 (클래스의 주석, id는 @Id@GeneratedValue입니다). 모든 클래스에는 기본 생성자와 기본 getter/setter가 있습니다.JPA2를 사용한 스키마 생성 중에 하나의 엔티티가 무시되는 이유는 무엇입니까?

클래스 중 하나를 제외한 모든 것이 서로 연관되어 있습니다 (연결 또는 상속을 통해). 그리고이 클래스는 스키마 생성 과정에서 데이터베이스에 생성 된 데이터베이스 테이블을 가져 오지 않습니다.

만들 :

나는 hbm2ddl.auto 다음과 같은 설정을 시도했습니다 모든 테이블을하지만 하나가 생성됩니다. 첫 번째 엔티티에 액세스 할 때 예외가 throw됩니다 (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '...' doesn't exist) 또는 코드가 Oracle DB에서 실행되는 경우 오라클과 동일합니다.

: 최대 절전 모드는 스키마 유효성 검사 중에 누락 된 테이블에 대해 불만을 토로합니다.

업데이트 : 테이블이 생성되지 않고 해당 클래스의 엔티티가 처음 액세스 될 때 예외 (예 : 생성)가 발생합니다.

누구에게이 아이디어가 있습니까?

+0

실패한 엔티티의 소스 코드를 게시 할 수 있습니까? – nfechner

+0

당신은 Hibernate 특정 설정이나 JPA'persistence.xml' 포맷을 사용하고 있습니까? 귀하의 질문에 구성을 포함하십시오. –

답변

1

다음을 시도해보십시오. id 필드 만 갖도록 해당 엔티티의 클래스를 수정하십시오. id 필드가 @Id로 주석 된 경우 클래스에 @Entity가 주석되어 있는지 확인하십시오. 이 엔티티가 매핑 된 클래스 목록에서 선언되었는지 (또는 매핑 된 패키지 사이에 선언 된 패키지에 있는지) 확인하십시오. log4j.xml을 통해 "TRACE"레벨 로깅을 "org.hibernate"에 추가하십시오. Hibernate 세션을 시작하고 (앱을 시작한다) 로그에서 Hibernate가 스키마를 생성하기 위해 생성하는 명령문을 찾는다. 테이블이 없다면 빈을 올바르게 구성하지 않고 최대 절전 모드를 모델의 일부로 간주하지 않습니다. 해당 테이블 생성을위한 sql이 있지만 실행될 때 오류가 발생하면 SQL에 실제로 포함 된 내용을 확인하십시오. 이것은 최대 절전 모드가 좋지 않은 것을 알아내는 데 도움이 될 수 있습니다. "empty"bean이 마침내 생성되면, 한번에 하나씩 property/associations를 추가하고 이전과 같은 check를 다시 실행하십시오. 어느 시점에서 특정 내용을 추가 할 때 오류가 발생하며 거기에서 해결책을 찾아야합니다.

+0

나는 다른 방식으로 실수를 발견했지만, 제안은 해결책을 찾았을 것입니다. 고마워. – Jonathan

0

바보, 바보. 클래스의 멤버 변수 이름으로 sql-keyword (update)를 사용했습니다.

나는 ORA-01747 메시지가 실패한 선택에 대해 알려주기를 원했지만 대신에 테이블이 전혀 작성되지 않은 이유를 실제로 자세히 보여 주었다.