Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate HQL在对象中实例化对象_Java_Spring_Hibernate_Hql - Fatal编程技术网

Java Hibernate HQL在对象中实例化对象

Java 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

注意:不使用实际示例,而是直接在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; }
}
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;