gpt4 book ai didi

java - JPA - 将对象保存在一起

转载 作者:行者123 更新时间:2023-11-29 21:20:57 25 4
gpt4 key购买 nike

我有一个实体 (javax.persistence) 对象,包含三个字段 - A、B 和已删除。组合(A、B、删除)应该是唯一的。我使用 true/null 作为删除的值,以便唯一约束在 MySQL 中保持良好。

假设我已经在数据库中有一条记录(1、a1、b1、true)。现在我尝试将该记录的删除更新为空,同时插入一个新对象(2、a1、b1、true)。因此,我的表将事务结束视为 (1, a1, b1, null), (2, a1, b1, true)。但是,此代码因违反唯一约束而失败。我理解这是预期的行为,因为在提交事务之前,现有记录将触发违规异常。

有什么方法可以做我想做的事情而不引发异常吗?

伪代码:

整个事情都在标记为事务性的方法中。

dbObj = repo.find(..)//返回 (1, a1, b1, true)
newObj = copyFrom(dbObj)//创建另一个 (a1, b1, true)
dbObj.setValid(null)
存储库.save(dbObj)
repo.save(newObj)

最佳答案

我宁愿建议您按照下面的伪代码中的步骤来实现这一点。

1) 将有效指标列值的默认值定义为 false。

private void saveObject(){
dbObj = repo.find(..)
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
dbObj.setValid(false);
tx.persist(dbObj);
em.flush();

newObj(a1,b1,true);
tx.persist(newObj);
em.flush();

tx.commit();
}

关于java - JPA - 将对象保存在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729500/

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