gpt4 book ai didi

java - hibernate dao设计问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:35:19 25 4
gpt4 key购买 nike

我希望创建一个通用的 DAO 来处理我的 hibernate 应用程序中的 CRUD。我的实体有大多数关联作为 LAZY 获取。但是我发现为了让 hibernate 尽可能高效地使用 SELECT,我必须在我的 DAO 上创建多个方法。这就是我的意思:

实体 A 有两个关联。有时我想在不加载关联的情况下检索这个实体,有时我希望它完全填充,所以我会在 DAO 上放置两个方法:

getWhatever()
getWhateverWithLoadedAssociations()

并且我有两个不同的查询,一个没有连接获取,另一个有连接获取。结果是 hibernate 总是做一个单一的选择,不管它是否懒惰,因为我知道我想先得到什么。

问题是,在保存一两个 SELECT 时,由于方法的数量增加了复杂性。

所以这是不是太极端了?当我需要关联数据时,我是否应该只使用 getWhatever() 并让 hibernate 执行另一个选择,即使我本可以避免不执行该 SELECT?

我希望这不会太困惑。我试图找出由于延迟加载导致的 SELECTS 数量成本与代码复杂性

谢谢

最佳答案

所以你的问题是你的方法可能太多了?我认为这是对的,因为那些方法做不同的事情。

如果你想减少数量并且你正在使用 HQL,你可以在方法中添加一个参数,说明你是否想加入获取关系:

getWhatever(WhateverFetchMode f)

其中 f 可以是一个 boolean 值,或者是一个对象,它返回字符串的 HQL 片段,为您提供要获取的关系。

public List<MyObject> getList(boolean fetchProp1) {
return em.createQuery("select r" +
"from Object as r " +
fetchProp1 ? "left join fetch r.prop1 " : "")
.getResultList();
}

public List<MyObject> getList(WhateverFetchMode fetchProp1) {
return em.createQuery("select r" +
"from Object as r " +
fetchProp1.toHql()) // This returns the right join fetch
.getResultList();
}

关于java - hibernate dao设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385748/

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