Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate:在一个setter中设置多个值_Java_Hibernate_Jakarta Ee_Jpa - Fatal编程技术网

Java JPA/Hibernate:在一个setter中设置多个值

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! } } 执行代码并正确

我有一个实体,其中一个字段B可能依赖于字段A(仅在某些情况下)。为了确保它们在需要时都得到更新(以避免使用实体的其他人忘记依赖关系),我尝试了以下方法:

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,我唯一想到的是您实际上没有使用托管实体。您确定域实体是托管实体吗。你如何获得它?您是否从实体经理处获得参考?您可以调试代码并验证主实体实际上是代理(您应该看到代理字段)