java - 如何使用 hibernate 条件对象使用内部连接选择查询

标签 java hibernate hibernate-criteria

我是 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 Criteria Object 实现它?

最佳答案

您的示例只是一个 native SQL,而不是 HQL。无论如何,您可以使用 Criteria 中的以下方法用于构建所需 Criteria 对象的 API:

例如,如果 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"))
                .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 实体中的属性名称和类名称。

关于java - 如何使用 hibernate 条件对象使用内部连接选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164727/

相关文章:

java - 如何管理多个微服务中的安全上下文

java - 使用 hibernate 删除对象后刷新 Jtable?

java - 如何在 Hibernate - Criteria Queries 中获得大于记录?

java - 当有多个结果时使用 hibernate Criteria.uniqueResult()

java - 如何将 'double' userLati、userLong 值和 String userName 传递给 Json 变量/对象

java - AVL 树不打印

java - Android:获取通知的唯一ID

java - Hibernate:必须在调用 save() 之前手动分配此类的 id

java - Hibernate criteria , rowcount() 仅适用于firstResult = 0

java - Hibernate - 从多个表到一个对象的复杂查询