spring-data-jpa 已修改[entity]实体的[column]属性,但由于该属性不可变,因此不会更新

hpcdzsge  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(257)

这个问题以前也有人问过,但是我还没有找到适合我的用例的答案。我创建了一个简化的玩具示例来解释我的问题。假设我们有一个CustomerPurchase实体:
第一个
正如您所看到的,采购使用两列与客户连接:客户的名字和姓氏(我知道这有点做作,因为加入客户ID会更好)。问题是当我试图更新现有的购买时。如果购买详细信息发生变化,我会创建一个全新的购买,设置新购买的ID字段,并保存新购买,新购买将覆盖旧购买,因为它们具有相同的ID。

customerRepository.save(new Customer("firstName", "lastName"));
purchaseRepository.save(new Purchase("itemName", "firstName", "lastName"));

Purchase p1 = purchaseRepository.findAll().get(0);
Purchase p2 = new Purchase("updatedItemName", "firstName", "lastName");
p2.setID(p1.getID());
purchaseRepository.save(p2);

但是,这始终会产生以下警告:

2022-07-22 21:04:22.088  WARN 46139 --- [           main] o.h.p.entity.AbstractEntityPersister     : HHH000502: The [customer] property of the [com.example.accessingdatajpa.Purchase] entity was modified, but it won't be updated because the property is immutable.

我需要帮助来防止出现此警告。
我知道我可以用p2的数据更新p1,但问题是在我的实际代码中,购买有很多字段,如果可能的话,我希望避免手动设置每个字段。如果有人有一个更好的解决方案,我可以根据新记录更新旧记录(不指定要更新的列的名称),我很乐意看到这个解决方案。

r55awzrz

r55awzrz1#

属性customer不是公共的,并且没有getter/setter,这就是Hibernate抱怨的原因。

相关问题