Как реализовать с критериями спящего режима Объект запроса выбора с внутренним соединением

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

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

  • Используйте setProjection (проекционная проекция), чтобы определить предложение 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 будет:

 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 } 

Обратите внимание, что все параметры в Criteria используют имя свойства и имя classа в отображаемых объектах Java.

Вы уверены, что это HQL? Для меня похож на собственный SQL-код.

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