我有一个实体定义如下:
public class Version {
@Id
private Long id;
private String content;
@Transient
private Model model;
//...
}
据我所知,当find
操作是在实体管理器上完成的,它使得SELECT
仅在底层数据库上访问一次,然后将实体缓存在实体管理器中。但是,我发现如果我分配一个Model
to the model
属性,此更改不会反映到缓存的实体。例如。如果在一次通话中,find
操作完成并且Model
被分配,当我这样做时find
再次来自另一个 EJB,model
财产是null
再次。此更改是否未反映到缓存的实体?也许是因为它是@Transient
?
实体管理器维护一级缓存,并且一旦事务结束,该一级缓存就被丢弃。否则,缓存将返回过时的值,因为同一应用程序或另一应用程序中的其他事务可能会修改或删除缓存的实体。
此外,每个并发事务都有自己的会话级缓存,因此也有自己的同一实体的实例。
如果在后续交易中,您find
同一实体,将发出新的 SQL 查询,并返回该实体的不同实例。
如果必须在给定实体的事务中记住某些内容,那么应该将其持久保存在数据库中。这就是数据库的意义所在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)