gpt4 book ai didi

java - Hibernate 查询与对象 id 列表匹配的对象列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:09 37 4
gpt4 key购买 nike

给定类 Foo、Bar,它们具有到表 Foo、A、B 和 C 的 hibernate 映射

public class Foo {
Integer aid;
Integer bid;
Integer cid;
...;
}

public class Bar {
A a;
B b;
C c;
...;
}

我构建了一个任意大小的列表 fooList,我想使用 hibernate 来获取列表,其中生成的列表将如下所示:

Bar[1] = [X1,Y2,ZA,...]
Bar[2] = [X1,Y2,ZB,...]
Bar[3] = [X1,Y2,ZC,...]
Bar[4] = [X1,Y3,ZD,...]
Bar[5] = [X2,Y4,ZE,...]
Bar[6] = [X2,Y4,ZF,...]
Bar[7] = [X2,Y5,ZG,...]
Bar[8] = ...

其中每个 Xi、Yi 和 Zi 代表一个独特的对象。

我知道我可以迭代 fooList 并获取每个列表并调用 barList.addAll(...) 来构建结果列表,如下所示:

List<bar> barList.addAll(s.createQuery("from Bar bar where bar.aid = :aid and ... ")
.setEntity("aid", foo.getAid())
.setEntity("bid", foo.getBid())
.setEntity("cid", foo.getCid())
.list();
);

有没有更简单的方法,最好是能够更好地利用 hibernate 并进行最少数量的数据库调用的方法?

我错过了什么吗? hibernate 不是合适的工具吗?

最佳答案

事实证明,以下内容满足了我的要求:

  • 在hibernate中定义一个组件Foo具有选择项目所需属性的类映射 Bar
  • 映射应通过一对一映射将复杂类型链接到 ID
  • 使用 id 填充 Foo 对象列表,以选择 Bars 列表

可以通过以下方式获取 Bar 列表

List<Foo> lf = this.getTheListOfFooWithIds(...);
Query qb = session.createQuery("from Bar b where b.foo in (:foo)");
qb.setParameterList("foo", lf);
List l = qb.list();

这满足了我的需要。

hibernate 创建的 SQL 并没有我想象的那么糟糕。

关于java - Hibernate 查询与对象 id 列表匹配的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2914786/

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