У меня есть следующая иерархия:
@Entity
@Table("changes")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
class Change {
@Column(name="type", nullable=false, insertable=false, updatable=false)
@GeneratedValue
String _type;
@ManyToOne
@JoinColumn(name = "user_id")
User _user;
}
@Entity
class EmailChange extends Change {}
@Entity
class BillingChange extends Change {}
@Entity
class User {
@OneToMany(mappedBy = "_user", cascade = Array(Cascade.ALL))
List<EmailChange> _emailChanges;
@OneToMany(mappedBy = "_user", cascade = Array(Cascade.ALL))
List<BillingChange> _billingChanges;
}
Я ожидаю, что _emailChanges будет содержать только строки, где type = "EmailChange", и _billingChanges - строки с type = "BillingChange". Однако это не то, что происходит на самом деле - оба содержат строки обоих типов. Есть ли способ заставить его подчиняться полиморфным отношениям?