JPA暂时信息在创建时丢失

前端之家收集整理的这篇文章主要介绍了JPA暂时信息在创建时丢失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个具有瞬态场的实体.当我想创建一个新的对象实例时,我失去了我的瞬时信息.以下示例演示了此问题.为了这个例子,我们来说吧吧是一个短暂的领域.
FooEntity fooEntity = new FooEntity();
fooEntity.setFoobosity(5);
fooEntity.setBarness(2);
fooEntity = fooEntityManager.merge(fooEntity);
System.out.println(fooEntity.getFoobosity()); //5
System.out.println(fooEntity.getBarness()); //0 (or whatever default barness is)

有什么办法保持我的短暂信息吗?

解决方法

这或多或少地按照设计工作.瞬态的语义正是070​​00.从entityManager.merge(obj)返回的实体实际上是一个全新的实体,它保持对象的状态被传递到merge(状态,在这种情况下,不是任何东西持久化对象的一部分).这在07年01月进行了详细说明.注意:在对象合并之后,可能会有JPA实现来维护瞬态字段(仅仅因为它们返回相同的对象),但是这个行为不能被规范所保证.

基本上你可以做两件事情:

>决定持续的瞬态场.如果在将类合并到持久性上下文中之后需要它,它似乎并不是短暂的.
>保持永久对象外部的瞬态字段的值.如果这符合您的需求,您可能需要重新思考域类的结构;如果这个字段不是域对象状态的一部分,那真的不应该在那里.

最后一件事:我发现域类上的瞬态字段的主要用例是划分派生字段,即可以根据类的持久字段重新计算的字段.

原文链接:https://www.f2er.com/java/122539.html

猜你在找的Java相关文章