Hibernate @DiscriminatorValue没有拿起

时间:2011-09-23 08:03:37

标签: hibernate hibernate-mapping

我有以下层次结构:

@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”的行。然而,这不是实际发生的事情 - 最终都包含两种类型的行。有没有办法强迫它服从多态关系?

1 个答案:

答案 0 :(得分:0)

您将其映射为SINGLE_TABLE,因此所有列都将转到单个表。 OneToMany为该表创建外键。同一个表不能有不同的列。