JPA EntityManager缓存

Ari*_*iod 2 java jpa entitymanager

我有一个实体定义如下:

public class Version {
    @Id
    private Long id;
    private String content;
    @Transient
    private Model model;

    //...
}
Run Code Online (Sandbox Code Playgroud)

从我所看到的,当find在Entity Manager上完成一个操作时,它只SELECT在底层数据库上创建一次,然后在实体管理器中缓存该实体.但是,我看到如果我Modelmodel属性分配了一个,则此更改不会反映到缓存的实体.例如,如果在一次调用中,find操作已完成并Model已分配,则当我find再次从另一个EJB执行操作时,model属性将null再次出现.此更改是否未反映到缓存实体?也许是因为它@Transient

JB *_*zet 7

实体管理器维护第一级缓存,并且一旦事务结束,该第一级缓存就被丢弃.否则,缓存将返回过时值,因为在同一应用程序或另一个应用程序中的其他事务可以修改或删除缓存的实体.

而且,并发事务每个都有自己的会话级缓存,因此它们自己的实例是同一个实体.

如果在后续事务中,您find是同一个实体,则将发出新的SQL查询,并返回该实体的不同实例.

如果必须在给定实体的事务之间记住某些内容,则应该在数据库中使其保持不变.这就是数据库的重点.