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

后端 未结 2 643
一生所求
一生所求 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:

    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
    }   
    

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

    0 讨论(0)
  • 2020-12-16 07:23

    Are you sure that's HQL? Looks like native SQL to me.

    In order to use Criteria your entities need to be mapped and associated with each other (since Criteria only allows navigating association paths). I think you could get more help if you give some details about your mappings.

    0 讨论(0)
提交回复
热议问题