我有一个JPA实体,其中包含对另一个表的ManyToOne引用,该实体的简化版本如下所示:
@Entity
@Table(name = "ENTITIES")
public class Entity implements Serializable {
@Id @NotNull
private String id;
@JoinColumn(name = "REFERENCE", referencedColumnName = "ID")
@ManyToOne(optional = false)
private ReferencedEntity referencedEntity;
}
@Entity
@Table(name = "REFERENCES")
public class ReferencedEntity implements Serializable {
@Id @NotNull @Column(name = "ID")
private String id;
@Size(max = 50) @Column(name = "DSC")
private String description;
}
查找实体工作正常。 Peristing实体也工作正常,在我的特定设置中有点太好了,我需要一些额外的验证。
问题
我的要求是表 REFERENCES 中的行是静态的,不应修改或添加新行。
目前,当我使用不存在的 ReferencedEntity 创建新的 Entity 实例并保留该实例时,会向 REFERENCES 添加一个新行
现在我在调用persist()之前已经在我自己的validate()方法中实现了这个检查,但我宁愿更优雅地做。 使用枚举而不是真实实体不是一种选择,我希望自己在没有重建/重新部署的情况下自己添加行。
我的问题
这样实施支票的最佳方式是什么?
是否有一些BV注释/约束可以帮助我限制这个?也许是第三方图书馆?
答案 0 :(得分:1)
听起来您需要首先执行数据库查询以检查值是否存在然后插入记录。这必须在事务中完成,以确保在插入时查询结果仍然为真。我有半年的类似问题可能会为你提供一些如何设置锁定的线索。 Please see this SO question.
答案 1 :(得分:0)
你应该添加这个=> insertable = false,updatable = false
并删除=> optional = false,也许尝试nullable = true