How to implement with hibernate criteria Object the select query with inner join

后端 未结 2 649
一生所求
一生所求 2020-12-16 06:20

I\'m new with Hibernate and Criteria Query. So I have implemented the query in HQL:

select A.mobilephone
    B.userNick
    C.creditCard
from mobile_table A
         


        
2条回答
  •  不知归路
    2020-12-16 07:05

    Your example is just a native SQL , not the HQL . Anyway , you can use the following methods from the Criteria API to construct the desired Criteria object :

    • Use the setProjection(Projection projection) to define the select clause
    • Use the createCriteria(String associationPath,String alias) to define the inner join

    For example , if the SQL is :

    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"
    

    Then the Criteria object will be:

    ListresultList= (List)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
    }   
    

    Please note that all parameters in the Criteria use the property name and class name in the mapped Java entities.

提交回复
热议问题