2017-10-26 19 views
0

나는 여기 를 JPA 3 수준의 상속 (그러나 하나의 데이터 테이블 CELLAR_PER)가 내 엔티티 필요스키마 검증 : JPA 멀티 레벨 상속 누락 된 테이블

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class PersistEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    ... 
} 

두 번째 수준

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class PersistEntityPer extends PersistEntity { 
    private static final long serialVersionUID = 1L; 

    @Temporal(TemporalType.DATE) 
    @Column(
     name = "PERIOD_START", 
     nullable = false) 
    private Date periodStart; 

    @Temporal(TemporalType.DATE) 
    @Column(
     name = "PERIOD_END", 
     nullable = false) 
    private Date periodEnd; 
} 

그리고 마지막 레벨

@Entity 
@Table(name = "dbo.CELLAR_PER") 
public class CellarPer extends PersistEntityPer { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(
     name = "CELLAR_CASE_ID", 
     nullable = false) 
    private CellarCase cellarCase; 
} 

내 문제는 내가 일 수 있다는 것입니다

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [dbo.CELLAR_PER] 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:121) 
    at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42) 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89) 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:191) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889) 
    ... 48 common frames omitted 

, 해당 오류를 수정하는 데 도움이 수 사항 : 내 Tomcat 서버를 실행할 때 오류가 무엇입니까?

+0

아이디어는 루트 클래스는 테이블을 정의하고, 서브 클래스는 그것으로 지속된다는 것입니다 (또한 당신이 유일한 루트 클래스에서 상속을 정의). 하위 클래스에서 테이블을 정의하려는 것처럼 보이는데 작동하지 않습니다. JPA 제공자가 작성한 테이블을 보지 않으시겠습니까? 일명 – DN1

+0

디버깅 JPA 내가 널이 아닌 NOT NULL, 버전 INT null가 아닌, PERIOD_START 날짜 null가 아닌, PERIOD_END 날짜 => '테이블 dbo.CELLAR_PER을 만들 code' ( ID의 INT 정체성 원하는의 대응은 다음 표를 생성 , CELLAR_CASE_ID int not null, 기본 키 (ID) ); 'code' – fipro28

+0

은 스키마 이름이나 테이블 이름이 dbo입니까? – Ponni

답변

0

네 말이 맞아. 여기에 솔루션입니다 :

내 엔티티 선언에서, 나는이 있었다 :

@Table(name = "dbo.CELLAR_PER") 

을 그리고 난 그냥 선언에서 dbo.를 제거했습니다. 이 솔루션은 다음과 같습니다 SINGLE_TABLE와

@Table(name = "CELLAR_PER") 
-1

오른쪽, 나는 단지 "dbo"때문에 시간을 잃었습니다. 그게 바로 그거야 ... 도와 줘서 고마워.

+1

자신 만의 질문에 대답하는 것이 좋지만 답변을 제공하면 실제 답변을 제공합니다 (즉, 문제의 원인과 해결 방법을 설명합니다). 당신이 올린 것은 코멘트입니다. –