gpt4 book ai didi

Hibernate:session.get 和 session.load 之间的区别

转载 作者:行者123 更新时间:2023-12-03 05:03:16 24 4
gpt4 key购买 nike

从 API 中,我可以看到它与代理有关。但我找不到很多关于代理的信息,也不明白调用 session.getsession.load 之间的区别。有人可以解释一下或引导我到引用页面吗?

谢谢!!

最佳答案

来自Hibernate forum:

This from the book Hibernate in Action. Good one read this..

<小时/>

通过标识符检索对象以下 Hibernate 代码片段从数据库中检索 User 对象:

User user = (User) session.get(User.class, userID);

get() 方法很特殊,因为标识符唯一标识单个一个类的实例。因此,应用程序通常使用标识符作为持久对象的方便句柄。通过标识符检索可以使用缓存检索对象时,如果该对象已缓存,则避免数据库命中。Hibernate还提供了load()方法:

User user = (User) session.load(User.class, userID);

load() 方法比较旧; get() 被添加到 Hibernate 的 API 由于用户要求。区别是微不足道的:

如果 load() 在缓存或数据库中找不到对象,则会出现异常抛出。 load() 方法永远不会返回 null。 get() 方法返回如果找不到对象,则返回 null。

load() 方法可能返回代理而不是真正的持久实例。代理是一个占位符,当真实对象被加载时,它会触发加载。第一次访问;上另一方面, get() 永远不会返回代理。在 get() 和 load() 之间进行选择很容易:如果您确定持久性对象存在,不存在将被视为异常(exception),load() 是一个不错的选择。如果您不确定是否存在具有给定的持久实例标识符,使用 get() 并测试返回值是否为 null。使用 load() 有进一步的含义:应用程序可以检索对某个对象的有效引用(代理)持久实例,无需访问数据库来检索其持久状态。所以load() 在找不到持久对象时可能不会抛出异常在缓存或数据库中;稍后当代理时会抛出异常被访问。当然,通过标识符检索对象并不像使用任意标识符那样灵活查询。

关于Hibernate:session.get 和 session.load 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608947/

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