我有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 :(得分:1)
不确定我是否完全理解你想要达到的目标。但是你可以创建一个HQL查询(带有投影),只查询你所设置的列,例如:
select a.whatever, b.id from A a join a.b b
之后,您为界面ResultTransformer提供了一个实现,并使用query
query.setResultTransformer(yourTransformer)
对象
您的结果转换器实现负责为A
和B
答案 1 :(得分:1)
也许考虑编写自己的函数来构建查询和使用StrinBuilder类 - 使用hql.append而不是写出查询!!!
import org.hibernate.Hibernate; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search;
不确定它是否有帮助,否则去查看cyclos web应用程序 - 它包含大量查询和java文件。它的开源和使用全面的休眠
问候