Как мы модифицируем HQL-преобразователь при загрузке определенного родительского или другого сопоставленного свойства объекта?
Это важное дополнение, особенно для решения проблем с производительностью при возможности написания эффективных динамических HQL-запросов.
Но как мы можем изменить HQL-преобразователь в случае загрузки определенного родительского или другого сопоставленного свойства объекта?
Следующий код:
session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate "
+ " from SomeTable st "
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
работает нормально, но что, если я хочу загрузить только некоторые из его родительских свойств?
Например, скажем, SomeTable
есть родитель по имени SomedParent
и я хочу получить доступ к одному из полей этого родителя только?
session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate, st.someParent.someParentField as someParentField "
+ " from SomeTable st "
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
Так есть идеи?
1 ответ
Вы почти правы.
Сначала вы создаете SomeTable
:
class SomeTable {
private Long stNumber;
private Date stDate;
private String someParentField;
//getters and setters
}
И ваш запрос:
session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate, someParent.someParentField as someParentField "
+ " from SomeTable st "
+ " JOIN st.someParent someParent"
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(SomeTable.class))
.list();
В этом случае вам не нужно создавать конструктор для SomeTable
учебный класс.