Как реализовать с помощью критериев гибернации - PullRequest
4 голосов
/ 17 ноября 2011

Я новичок в 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?

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

Ваш пример - просто нативный SQL, а не HQL. В любом случае, вы можете использовать следующие методы из API Criteria для создания требуемого объекта Criteria:

Например, если 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.

0 голосов
/ 17 ноября 2011

Вы уверены, что это HQL?Для меня это выглядит как родной SQL.

Чтобы использовать Критерии, ваши сущности должны быть сопоставлены и связаны друг с другом (поскольку Критерии разрешают только навигацию по путям ассоциации).Я думаю, что вы могли бы получить дополнительную помощь, если бы вы подробно описали ваши отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...