如何在hibernate中的两个表上实现查询数据?

时间:2012-06-12 08:26:16

标签: hibernate

如何在hibernate中实现此查询?

select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id

3 个答案:

答案 0 :(得分:1)

好的解决方案:

两张桌子之间有关系。这种关系是一对一,一对多,多对一或多对多。在映射中创建此关系。例如,如果table2是table1的子项,那么在table1类和映射中创建一个具有上述关系之一的属性,只使用HQL语句“从table1”加载table1(可选where-condition;也可选择你可以指定两个表之间的内部联接),并使用table1.getTable2()(1:1或n:1关系)或table1.getTable2List()(1:n或n:m关系)访问table2。

Sloppy solution(但如果仅在特殊情况下使用select,则绝对正常):

在HQL select table1.col1, table1.col2, table2.col1 from table1 inner join table2 where ...中执行并评估对象数组列表,或者执行select new Tabble1Table2Pojo(table1.col1, table1.col2, table2.col1) from table1 inner join table2 where ...并评估Tabble1Table2Pojo列表。

答案 1 :(得分:1)

我认为这会对你有帮助。

Criteria criteria = session.createCriteria(table1.class);
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2));
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("name"), name);
criteria.setProjection(proList);
List list = criteria.list();

答案 2 :(得分:1)

你必须使用投影api

Criteria criteria = session.createCriteria(table1.class);
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2));
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("name"), name);
criteria.setProjection(proList);
List list = criteria.list();

在上面的示例中也没有使用别名,但您可以使用别名,它使用起来非常简单。