Hibernate查询与对象ID的列表匹配的对象列表

时间:2010-05-26 16:14:57

标签: java hibernate orm

给定一个类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并进行最少量的数据库调用?

我错过了什么吗?休眠不适合这个吗?

1 个答案:

答案 0 :(得分:1)

原来,以下是我想要的:

  • 在休眠中定义组件Foo 具有选择项目所需属性的类映射条
  • 映射应通过一对一映射将复杂类型链接到ID
  • 使用将选择条形列表
  • 的ID填充Foo对象列表

可以通过

获取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并不像我预期的那么糟糕。