2010-12-02 2 views
4

У меня есть 2 классов:создать объект в спящий режим выберите

class A { 
B b; 

public A() {} 
public A(B b) { setB(b); } 
... 
} 

class B { 
int id; 
public B(int id) { setId(id); } 
} 

в HQL я хочу, чтобы выбрать, как это:

select new A(new B(a.b.id)) from A a 

но я получил ошибку

org.hibernate. hql.PARSER - строка 1:48: неожиданный токен:,

Возможно ли создать объект в параметре или выбрать только поле и создать его внутри конструктора?

+0

Что именно вы хотите? Почему вам нужно использовать `new` здесь, разве вы не можете просто« SELECT a ... »? – axtavt 2010-12-02 12:56:20

+0

в этом классе больше полей, и я не хочу их выбирать. – Dainius 2010-12-02 13:01:01

ответ

1

Не уверен, что я точно понял, чего вы хотите достичь. Но вы можете создать запрос HQL (с проекцией) на только запрос для столбцов вы intereset в, как:

select a.whatever, b.id from A a join a.b b 

После этого вы обеспечить реализацию для интерфейса ResultTransformer и установить его на свой query объект с query.setResultTransformer(yourTransformer)

Ваша реализация результирующего трансформатора отвечает за создание экземпляров для A и B

1

возможно смотреть в письменной форме свою собственную функцию для создания ваших запросов и использование класса StrinBuilder - использовать hql.append модули просьба написать запрос !!!

import org.hibernate.Hibernate; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search;

не уверен, если это поможет, в противном случае зайдите и проверьте веб-приложение cyclos - оно включает в себя множество запросов и соответствующих java-файлов. Его открытый источник и использует сложный спящий режим

приветствует

Смежные вопросы