gpt4 book ai didi

java - JPA/validation @ManyToOne 关系不应创建新行

转载 作者:行者123 更新时间:2023-11-30 06:52:02 24 4
gpt4 key购买 nike

我有一个 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;
}

查找实体效果很好。持久实体也可以正常工作,但在我的特定设置中有点太好了,我需要一些额外的验证。

问题
我的要求是表 REFERENCES 中的行是静态的,不应修改或添加新行。
目前,当我使用尚不存在的ReferencedEntity创建一个新的Entity实例并保留该实例时,会向REFERENCES添加一个新行.

现在,我已经在调用 persist() 之前在自己的 validate() 方法中实现了此检查,但我宁愿做得更优雅。
使用枚举而不是真实实体不是一种选择,我想自己添加行,而无需在将来多次重建/重新部署。

我的问题
实现这样的检查的最佳方法是什么?
是否有一些 BV 注释/约束可以帮助我限制这一点?也许是第三方库?

最佳答案

听起来您需要首先执行数据库查询来检查该值是否存在,然后插入记录。这必须在事务中完成,以确保查询结果在插入时仍然为真。半年前我遇到了类似的问题,这可能会为您提供一些有关如何设置锁定的线索。 Please see this SO question.

关于java - JPA/validation @ManyToOne 关系不应创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42556046/

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