我有以下层次结构:
@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”的行。然而,这不是实际发生的事情 - 最终都包含两种类型的行。有没有办法强迫它服从多态关系?
答案 0 :(得分:0)
您将其映射为SINGLE_TABLE,因此所有列都将转到单个表。 OneToMany为该表创建外键。同一个表不能有不同的列。