我在JPA 2.1中使用了Hibernate,我想用两个子实体定义一个实体。我的问题是我想用两列定义一个UniqueConstraint:一个MemberField和DiscriminatorColumn。
编辑:因为尼古拉斯的答案解决了我的特定问题,所以我将父类的类型从抽象更改为非抽象。
我的代码如下所示:
父母
@Entity
@Inheritance
@DiscriminatorColumn(name = "TYPE")
@Table(name = "EXAMPLE", uniqueConstraints = @UniqueConstraint(columnNames = { "TYPE", "NAME" }) )
public class ExampleParent extends AbstractEntity
{
private static final long serialVersionUID = 68642569598915089L;
@Column(name = "NAME", nullable = false, length = 30)
@NotNull
private String name;
...
}
儿童1
@Entity
@DiscriminatorValue("TYPE1")
public class Example1 extends ExampleParent
{
private static final long serialVersionUID = -7343475904198640674L;
...
}
儿童2
@Entity
@DiscriminatorValue("TYPE2")
public class Example2 extends ExampleParent
{
private static final long serialVersionUID = 9077103283650704993L;
...
}
现在,我不想在ExampleParent的名称上使用UniqueConstraint,因为我希望能够持久保存具有相同名称的Example1和Example2的两个对象。以下代码应对此进行解释:
@Autowired
Example1Repository example1Repo;
@Autowired
Example2Repository example2Repo;
Example1 example1 = new Example1();
example1.setName("example");
example1Repo.save(example1);
Example2 example2 = new Example2();
example2.setName("example");
example2Repo.save(example2);
因此,我的目标是设置两列的UniqueConstraint,但实际上我想使用DiscriminatorColumn和ExampleParent的字段。 DiscriminatorColumn和名称的组合应该是唯一的。
我的代码无效,那么我有什么选择?
最佳答案
如果您使用的是抽象基类,我希望您使用的是@MappedSuperclass
注释而不是@Inheritance
。
@MappedSuperclass更适合多态,这就是您所拥有的。我不认为@Inheritence支持多态。