Java JPA/Hibernate:在一个setter中设置多个值
我有一个实体,其中一个字段B可能依赖于字段A(仅在某些情况下)。为了确保它们在需要时都得到更新(以避免使用实体的其他人忘记依赖关系),我尝试了以下方法:Java JPA/Hibernate:在一个setter中设置多个值,java,hibernate,jakarta-ee,jpa,Java,Hibernate,Jakarta Ee,Jpa,我有一个实体,其中一个字段B可能依赖于字段A(仅在某些情况下)。为了确保它们在需要时都得到更新(以避免使用实体的其他人忘记依赖关系),我尝试了以下方法: public void setA(A a) { this.a = a; if (condition) { this.b = someCalculation(a); // setB(someCalculation(a)); Doesn't work either! } } 执行代码并正确
public void setA(A a) {
this.a = a;
if (condition) {
this.b = someCalculation(a);
// setB(someCalculation(a)); Doesn't work either!
}
}
执行代码并正确填写B的值。然而,B不是持久的
这样的事情是不可能的吗?为什么hibernate没有意识到B的变化
提前感谢,
Alex您应该使用不直接访问字段的setter。考虑到在Hibernate/JPA中,实体是代理的,因此某些操作在更改时会执行(使用方法)
您可能还需要查看主实体和“b”实体之间的关系,以便在设置新的“b”实体时是否确定在所有更改后对象会保持不变?你能展示更多的代码吗?顺便说一下这段代码的味道,我建议将这个逻辑从setter移到某个单独的方法/classYes,因为字段A被正确地持久化了。它也不起作用。无论如何,B使用字段访问。B是同一实体内的字段。B实际上是日期类型。如果B是简单类型(如日期),并且您使用的是setter,我唯一想到的是您实际上没有使用托管实体。您确定域实体是托管实体吗。你如何获得它?您是否从实体经理处获得参考?您可以调试代码并验证主实体实际上是代理(您应该看到代理字段)