Java Hibernate HQL在对象中实例化对象
注意:不使用实际示例,而是直接在stackoverflow上键入我的情况的“mock”,因此请忽略语法错误 假设我有一个2类,其中A是B的一对多。忽略缺少getter/setterJava Hibernate HQL在对象中实例化对象,java,spring,hibernate,hql,Java,Spring,Hibernate,Hql,注意:不使用实际示例,而是直接在stackoverflow上键入我的情况的“mock”,因此请忽略语法错误 假设我有一个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; } } cla
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;
}
}
使用HibernateTemplate
和Query
使用Query.list()
可以立即获得实例化的对象
我这里的问题是我是否可以在另一个实例化中实例化?差不多
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;
主要的问题是,我想要的是可能的吗?如果是,怎么做?:)
谢谢,如果你有任何关于。。。我的问题是,请开枪
谢谢 你到底为什么在查询中调用entties的构造函数?只需使用
从左连接中选择一个,获取a.kids
@我不知道,对,纯粹是白痴。不幸的是,遗留代码就是遗留代码,正如我所指出的,上面不是一个真实的例子。让我们只说,有理由这样做(目前),然后当真正的时候,更好的重构将发生。这回答了吗?不,一个实体就是一个实体就是一个实体。无论是旧的还是新的,查询As和加载他们的孩子都可以像我的评论一样。@jbnize好吧,我喜欢错,意味着我学到了一些东西,当我想起来你可能完全正确时,它只需要一些重构,因为你建议将我的最终对象从列表B反转为a。我会尝试做点什么,不像我有生活什么的。我会把这件事告诉你的,以防你像我一样生活interested@JBNizet花了一点时间,但你是对的,这个解决方案工作得很好,而且性能很好。非常感谢,好心的先生!
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;