6
@MappedSuperclass
public abstract class AbstractBaseModel{ }

@MappedSuperclass
public class Person extends AbstractBaseModel { }

@Entity
public class APerson extends Person { }

@Entity
public class BPerson extends Person { }

@Entity
public class Course extends AbstractBaseModel { 
  @ManyToOne
  @JoinColumn(name ="person")
  private Person person;
}

上記の構造では例外が発生します。

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on    
Course references an unknown entity: Person

これは、具体的なエンティティではないため、マッピングでPersonを使用できないことを示しています。このような継承シナリオを実現するにはどうすればよいですか?

4

2 に答える 2

4

簡単です。@MappedSuperclass注釈をにPerson変更します@Entity

@MappedSuperclassクラスをクエリ可能にしたくない場合、またはリレーションの一部にしたくない場合にのみ使用してください。@Entity他のどこでも。

abstract決定するための適切なヒューリスティックは、スーパークラスが-使用されている場合は-使用しているかどうかを確認すること@MappedSuperclassです。AbstractBaseModel

于 2013-03-19T15:42:39.103 に答える
0
@Entity
@Table(name="PERSON")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator",discriminatorType=DiscriminatorType.STRING)
public absract class Person extends AbstractBaseModel { }

@Entity
public class APerson extends Person { }

@Entity
public class BPerson extends Person { }

@Entity
public class Course extends AbstractBaseModel { 
  @ManyToOne
  @JoinColumn(name ="person", **insertable = false, updatable = false** )
  private Person person;
}
于 2016-06-15T05:12:38.520 に答える