给定一个类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;
...;
}
我构建了一个任意大小的List fooList,我想使用hibernate来获取List,结果列表看起来像这样:
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并获取每个List并调用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并进行最少量的数据库调用?
我错过了什么吗?休眠不适合这个吗?
答案 0 :(得分:1)
原来,以下是我想要的:
可以通过
获取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并不像我预期的那么糟糕。