-6

如何在休眠中实现此查询?

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

3 回答 3

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();

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

于 2012-06-12T09:32:51.587 回答
1

很好的解决方案:

两个表之间存在关系。这种关系是一对一、一对多、多对一或多对多。在您的映射中创建此关系。例如,如果 table2 是 table1 的子级,则在 table1 类和映射中,您创建一个具有上述关系之一的属性,您只需使用 HQL 语句“from table1”加载 table1(带有可选的 where 条件;也可以选择您可以指定两个表之间的内连接),并且您使用table1.getTable2()(1:1 或 n:1 关系)或table1.getTable2List()(1:n 或 n:m 关系)访问 table2。

马虎的解决方案(但如果仅在特殊情况下使用 select 绝对可以):

在 HQLselect 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 列表。

于 2012-06-12T08:39:37.233 回答
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();
于 2012-06-12T08:53:13.090 回答