当前位置: 首页 > 面试题库 >

如何使用hibernate条件实现使用内部联接对象的选择查询

阙星渊
2023-03-14
问题内容

我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询:

select A.mobilephone
    B.userNick
    C.creditCard
from mobile_table A
inner join user_table B
    on A.codmobile=B.codmobile
inner join Credit C 
    on A.mobileCredit= C.mobileCredit

如何使用hibernate条件对象实现它?


问题答案:

您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria
API中的以下方法来构造所需的Criteria对象:

  • 使用setProjection(Projection projection)定义select子句
  • 使用createCriteria(String associationPath,String alias)定义内部联接

例如,如果SQL是:

select
    TableA.columnA ,TableB.columnB ,TableC.columnC
from TableA 
inner join TableB on TableA.tableB_id=TableB.id
inner join TableC on TableA.tableC_id=TableC.id
where TableA.columnAA="AAA"
and TableB.columnBB="BBB"
and TableC.columnCC="CCC"

那么Criteria对象将是:

List<Object[]>resultList= (List<Object[]>)session.createCriteria(TableA.class, "aliasOfTableA") 
                .add(Restrictions.eq("aliasOfTableA.columnAA", "AAA"))  
                .createCriteria("aliasOfTableA.tableBId" , "aliasOfTableB")
                .add(Restrictions.eq("aliasOfTableB.columnBB", "BBB"))
                .createCriteria("aliasOfTableA.tableCId" , "aliasOfTableC")
                .add(Restrictions.eq("aliasOfTableC.columnCC", "CCC"))
                .html" target="_blank">setProjection( Projections.projectionList()
                        .add( Projections.property("aliasOfTableA.columnA") )
                        .add( Projections.property("aliasOfTableB.columnB"))
                        .add( Projections.property("aliasOfTableC.columnC") )
                ).list();

for (Object[] obj : resultList) {
        System.out.println(obj[0]); //print the value from TableA.columnA
        System.out.println(obj[1]); //print the value from TableB.columnB
        System.out.println(obj[2]); //print the value from TableC.columnC
}

请注意,所有参数Criteria使用映射的Java实体中的属性名称和类名称。



 类似资料:
  • 问题内容: 我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询: 如何使用休眠条件对象实现它? 问题答案: 您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria API中的以下方法来构造所需的Criteria对象: 使用setProjection(Projection projection)定义select子句 使用createCriter

  • 我想使用Hibernate条件语言编写此查询。我对Hibernate很陌生,无法将此查询转换为条件形式。我参考了很多关于 SO 的答案,但就我而言,我在不同的列上使用内部连接而不是主键/外键列。我提到了这个,但仍然不能正确。

  • 我正在尝试将下面的嵌套查询转换为Hibernate Criteria,但无法做到。实际上,尝试对结果集中的行进行计数和求和。 有人有什么想法吗? 提前谢谢。 下面是为上述查询编写的标准, > 对于select main query, 对于内部查询填充结果集并传递给主查询, 但如何将这个子查询传递给主查询还不清楚。

  • 假设我有一个名为HQL(findRoomQuery)的文件: House实体的映射如下: 虽然Room实体是这样的: 这种关系是一个房子可以有一个或多个房间。 执行查询的代码如下: 您可以从选择r(r是h.room列表的别名)中看到HQL返回房间实体。 如何使用Hibernate条件查询做同样的事情?可能吗?

  • 问题内容: 在hibernate状态下,查询似乎有些困难。我正在两个表上执行内部联接。 产品表: 仓库表: 联接结果: 当我运行查询.. 因此,对于每个结果,我都会得到一个包含a 和a 的对象。 这是预期的。问题是hibernate将产品的ID和名称分配给仓库对象的ID和名称属性。在创建Warehouse项目时,好像联接结果中的前两列已经结束了。产品对象始终包含正确的数据。 关于解决此问题的任何建

  • 问题内容: 我有两个实体:和。我正在使用Hibernate 3.6。 如何使用休眠标准实现这一目标,最重要的是,我必须将其用于分页。 而“我的道”如下所示以显示jqgrid中的“问题”列表 公共列表showHelpDeskIssues(DetachedCriteria dc,int from,int size){ 对于简短的解释,请参考此问题,如何使用struts2-jqgrid插件在jqgrid