создать объект в спящем режиме - PullRequest
4 голосов
/ 02 декабря 2010

У меня есть 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: неожиданный токен:,

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

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

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

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

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

уважает

1 голос
/ 03 февраля 2011

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

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

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

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

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