首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有一对一关系且数据在外部更新的实体获取最新数据

从具有一对一关系且数据在外部更新的实体获取最新数据
EN

Stack Overflow用户
提问于 2015-06-23 20:32:01
回答 2查看 36关注 0票数 0

我不会解释我的问题,而是试着举一个例子:

假设我有一个User实体和一个Item实体。User实体与Item具有一对一的关系。

假设在某个时刻,我的服务器使用sql-update查询更新表。

我的问题是:下一次我会这样做:

代码语言:javascript
复制
Item item = user.getItem();

如何确保数据是最新的?而不是第一次查询用户实例时从数据库中读取的旧数据?

希望我的问题清楚了..。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-06-23 20:52:55

通过在DML命令后刷新实体管理器,然后再次查询对象,可以确定已更新的实体。

问候喜满树

票数 0
EN

Stack Overflow用户

发布于 2015-06-23 21:34:29

如果你在新的会话中这样做,那么它将是最新的(如果你没有对有问题的实体使用L2缓存)。

如果您使用L2缓存,那么它将不是最新的(如果数据在数据库中被更新,而Hibernate不知道)。在这种情况下,如果您的用例可以在特定时间间隔内使用过期数据,您可以为UserItem实体配置过期策略,从而限制它们在缓存中的生命周期。在它们从缓存中过期后,将从数据库中提取更新的数据。

如果您可以在后台更改数据时正确地使受影响的二级缓存条目无效,则可以避免完全使用陈旧数据(或减少将它们用作陈旧数据的可能时间间隔)。

如果您在现有的会话实例中执行此操作,则ItemUser实例都将位于一级缓存中,因此您将始终获取最初获取的数据。这几乎总是我们想要的行为。但是,您可以手动逐出实体实例(session.evict(item); session.evict(user))或清除整个会话(session.clear()),以逐出当前会话中的所有实例,然后从数据库中重新读取它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31002912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档