我有一个具有瞬态场的实体.当我想创建对象的新实例时,我会丢失我的瞬态信息.以下示例演示了此问题.为了举例,我们可以说barness是一个瞬态场.
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)
Run Code Online (Sandbox Code Playgroud)
有没有办法维护我的瞬态信息?
ig0*_*774 22
这或多或少都按设计工作.瞬态的语义恰恰是数据不会持久化.entityManager.merge(obj)
事实上,从实体返回的实体是一个全新的实体,它维护传递给合并的对象的状态(状态,在此上下文中,是不属于持久对象的任何东西).这在JPA规范中有详细说明.注意:可能有JPA实现在合并对象后维护瞬态字段(仅仅因为它们返回相同的对象),但规范不保证这种行为.
你可以做两件事:
决定坚持瞬态场.如果在将类合并到持久化上下文后需要它,它似乎并不是瞬态的.
保持持久对象之外的瞬态字段的值.如果这符合您的需求,您可能需要重新考虑域类的结构; 如果这个字段不是域对象状态的一部分,它实际上不应该存在.
最后一件事:我发现域类的瞬态字段的主要用例是划分派生字段,即可以根据类的持久字段重新计算的字段.
归档时间: |
|
查看次数: |
9574 次 |
最近记录: |