我有一个要求,其中我的许多实体需要一个 Long 值以及与其他实体的 @ManyToOne 关系。使用 MappedSuperclass 可以通过以下方式轻松实现此要求:
@MappedSuperclass
public class BaseEntity {
@Column(name = "value", nullable = false)
private Long value;
@JoinColumn(name = "some_entity_id", nullable = false)
@ManyToOne(fetch = FetchType.EAGER)
private SomeEntity some;
问题是长值和实体组合必须是唯一的。是否可以在超类中定义索引?如果我在实体的@Table 中定义索引,则代码按预期工作
@UniqueConstraint(name = "uq1", columnNames = {"value", "some_entity_id"})
挫折是约束必须沿所有子类复制,然后所有更改也需要复制,使继承几乎无用(绝对不那么优雅)
总结这里真正的问题是:可以从@MappedSuperclass 定义复合唯一约束吗?如果答案是否定的,那你会怎么做?
PS:我知道这只有在表生成生效时才有意义,这都是我们编码和最佳实践政治的一部分。