gpt4 book ai didi

java - Hibernate 需要值来拯救 child

转载 作者:行者123 更新时间:2023-12-02 07:29:33 25 4
gpt4 key购买 nike

我目前有工作代码可以将子项保存到父实体。但我想知道我做的事情是否正确,因为我现在在 hibernate 状态下的选择语句重载。我确实使用缓存,所以自动取款机我没有延迟问题,但我想知道我是否不能提高效率。以这个小摘录为例

MbaLog.debugLog(logger, "Saving CodeType");
Site site = codeType.getSite();
if (site != null && site.isProxy())
codeType.setSite(siteRepository.loadSiteById(site.getId()));
Long recordId = codeRepository.saveCodeType(codeType);

我正在保存一个具有子站点的实体 CodeType。该子对象作为代理对象传递给该方法,仅填充其 id。然后我从数据库中获取完全加载的 Site 对象并将其设置为代码类型。接下来,我将使用 hibernate 的 sessionfactory 的 codeType 保存到数据库(代码在这里不可见,但它位于 codeRepository 后面)。

这可行,但我正在加载一个完整的站点,它有自己的子站点,所以我看到在插入之前至少有 5 个查询通过。我可以在现场放置很多东西,但目前我不想这样做,因为更深层次的代码可能会变得复杂。我在工作中必须学习hibernate和JPA,过去从未接受过太多专家的培训。所以我想知道,是否有一个快捷方式可以将网站保存在 codetype 上?我需要将其完全加载还是 id 就足够了?或者只是 id 和版本(我在所有实体上使用 @version 注释来实现乐观锁定)

提前致谢

最佳答案

不要使用 Session.get() (或 EntityManager.find())来获取对 SIte 实体的引用,而是使用 Session.load( ) (或 EntityManager.getReference())来获取此引用。

这些方法将返回实体上的延迟加载代理,而不是执行查询来获取站点的数据。

关于java - Hibernate 需要值来拯救 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101139/

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