gpt4 book ai didi

java - Spring @Transactional 是否使用任何 Hibernate 缓存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:33 25 4
gpt4 key购买 nike

@Transactional
public MyEntity getEntity(long id) {
return dao.findOne(id);

//or select and update as well
}

每次我调用事务方法:我是否会从 hibernate 中获取任何缓存的实体(第一次除外)?或者我总是会从数据库中获取新的实体吗?

这很重要,因为我将有两个独立的应用程序共享同一个数据库,并且我想确保 hibernate 不会返回任何缓存的实体,而另一个应用程序可能已经在后台更新了数据库中的同一个实体。

最佳答案

如果这是您服务层的事务边界,那么 Hibernate 将创建一个新 session ,这意味着 first level cache 中没有任何内容。 .如果您尝试在同一个服务方法中两次调用 findOne 方法,第二次调用将从缓存中获取实体。

连续的服务方法调用(例如 getEntity)总是以一个新的 Hibernate session 结束,因此从数据库中加载了一个新的实体。

如果您使用二级缓存并为此实体激活它,那么 Hibernate 将始终先访问缓存,然后在缓存未命中时回退到数据库加载。

为防止数据完整性异常,请考虑使用 optimistic locking无论如何。

关于java - Spring @Transactional 是否使用任何 Hibernate 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27879451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com