次のエンティティがあります (短いバージョン):
GroupOfStudents:
@Entity
@Table(name = "group_of_students")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AGroupOfStudents extends AModel {
}
センチュリア:
@Entity
@Table(name = "cohort")
@PrimaryKeyJoinColumn(name = "id")
public class Cohort extends AGroupOfStudents {
@Column(nullable = false)
// @NaturalId <- here is the problem
private int number;
}
コホート:
@Entity
@Table(name = "centuria")
@PrimaryKeyJoinColumn(name = "id")
public class Centuria extends AGroupOfStudents {
@Column(nullable = false)
// @NaturalId <- here is the problem
private int cohort;
@Column(nullable = false)
// @NaturalId <- here is the problem
private char maniple;
}
したがって、GroupOfStudents を含む CourseLecture があります。Centuria や Cohort など、さまざまな GroupOfStudents があります。しかし、コホートの数値フィールドを NaturalId にしたいと考えています。これにより、エラーが発生します。
AnnotationException: @NaturalId only valid on root entity (or its @MappedSuperclasses)
しかし、ルート エンティティでのみ @NaturalId を使用できるのはなぜですか? クラスの継承を壊さずにこの問題を解決するにはどうすればよいですか?