gpt4 book ai didi

java - JPA - 为 SINGLE_TABLE 层次结构抽象类的两个子类分配不同的唯一约束

转载 作者:行者123 更新时间:2023-11-30 08:24:35 27 4
gpt4 key购买 nike

我有 3 个类:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class Tag {
@Id
private String id;
private String name;
}

@Entity
@Table(uniqueConstraints=
@UniqueConstraint(columnNames={"name"}))
public class SystemTag extends Tag {

}

@Entity
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"name", "user"}))
public class CustomTag extends Tag{
@ManyToOne
private User user;
}

所以我想为系统标签使用唯一的名称,为自定义标签使用唯一的名称-用户对(多个用户可以创建相同的标签)但是我收到如下两个警告:

<timestamp> WARN  AnnotationBinder:601 - HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: <domain>.CustomTag
<timestamp> WARN AnnotationBinder:601 - HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: <domain>.SystemTag

它允许我为同一用户创建两个同名的系统标签和两个同名的自定义标签。

我该如何处理?

最佳答案

如果您使用的是单个表,那显然是行不通的。

切换到使用 JOINED 策略

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Tag {
@Id
private String id;
private String name;
}

然后您将拥有一个用于 CustomTag 的表和一个用于 SystemTag 的表,如预期的那样具有唯一约束。

关于java - JPA - 为 SINGLE_TABLE 层次结构抽象类的两个子类分配不同的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com