注意:不使用现实生活中的示例,而是直接在stackoverflow上输入我的情况的“模拟”,所以请忽略语法错误。
假设我有2个班级,其中A是B的一对多。忽略缺少getter / setter
class A {
private int a;
private int b;
private List<B> kids;
public A() {}
public A(int a, int b) { this.a = a; this.b = b; }
}
class B {
private int c;
private int d;
private A parent;
public B() {}
// what I'd like to use:
public B(int c, int d, A a) { this.c = c; this.d = d; this.parent = a; }
// current workaround:
public B(int c, int d, int a, int b) {
A pr = new A(); pr.setA(a); pr.setB(b);
this.c = c; this.d = d; this.parent = pr;
}
}
目标是创建一个String查询,该查询将查询A和B并获得一个只有query.list()
被调用(没有设置后)的全部对象
HQL是如何表达的,我知道你可以做类似的事情:
select new A(a.column_1, a.column_2) from A a;
使用HibernateTemplate
和Query
使用query.list()
即可立即获得实例化的A对象。
我的问题是我是否可以在另一个实例化中实例化?像
这样的东西select new B(b.column_1, b.column_2, new A(a.column_1, a.column_2))
from A a, B b where a.a_id = b.a_id;
并实际使用我在上面标记为“首选”构造函数的构造函数。 当我尝试使用上面的方法时,我得到了一个例外:
antlr.NoViableAltException: unexpected token: A
目前我唯一的解决方法是使用其他“替代方法”构造函数,其查询类似于:
select new B(b.column_1, b.column_2, a.column_1, a.column_2)
from A a, B b where a.a_id = b.a_id;
主要问题是,我想要的甚至可能吗?如果有,怎么样? :)
谢谢,如果您对我的问题有任何疑问,请拍!
谢谢!