Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 对HQL中的两个表执行联接_Java_Hibernate_Hql - Fatal编程技术网

Java 对HQL中的两个表执行联接

Java 对HQL中的两个表执行联接,java,hibernate,hql,Java,Hibernate,Hql,考虑表A和表B。需要获取表A中的整列,而只需要获取表B中的一列。以前,创建了一个命名查询,使用该查询获取表A的整列值。现在我还需要包括表B的一列 在DAO类中,下面是代码 X x=null Query query = getEntityManager().createNamedQuery("AAA").setParameter("serialID",val); x=(X) query.getSingleResult() 在DTO类中,AAA是X类的一部分,X类指表A。AAA的查询如下: s

考虑表A和表B。需要获取表A中的整列,而只需要获取表B中的一列。以前,创建了一个命名查询,使用该查询获取表A的整列值。现在我还需要包括表B的一列

在DAO类中,下面是代码

X x=null
 Query query = getEntityManager().createNamedQuery("AAA").setParameter("serialID",val);
 x=(X) query.getSingleResult()
在DTO类中,AAA是X类的一部分,X类指表A。AAA的查询如下:

select X from A X where COLUMNVAL= serialID;

现在,表B也有柱形,我需要从表中考虑XYZ列的值。 我尝试了下面的查询,因为java.lang.object无法转换为

select X, Q.xyz from A X, B Q where X.COLUMNVAL = Q.COLUMNVAL AND X.COLUMNVAL=serialID
请告知如何进一步进行。A具有大量列,因此不首选ResultList

我尝试了下面的查询,得到了classcast异常 无法将java.lang.object强制转换为

从X,bq中选择X,Q.xyz,其中X.COLUMNVAL=Q.COLUMNVAL和 X.COLUMNVAL=serialID

如果您希望使用该查询,您将不获取类A的对象,而是获取一个对象数组,其中第一个元素是类的对象,第二个元素是值Q.xyz

所以你应该使用

Object[] x;
x=(Object[]) query.getSingleResult()

创建一个
ResultDTO
类,该类扩展实体类
a
,从而拥有类
a
中的所有字段,并拥有实体类
B
中自己的必填字段(
xyz
)。现在,您可以这样做以获得
ResultDTO

String queryString = "select a, b.xyz from A a join B b on(a.field = b.field)"
            + " where a.serialID = :serialID";  

return (List<ResultDTO>) entityManager.createQuery(queryString)
    .setParameter("serialID", serialId);
    .unwrap(org.hibernate.query.Query.class)
    .setResultTransformer(Transformers.aliasToBean(ResultDTO.class))
    .getResultList();
String queryString=“从a中选择a,b.xyz加入b on(a.field=b.field)”
+“其中a.serialID=:serialID”;
返回(列表)entityManager.createQuery(queryString)
.setParameter(“serialID”,serialID);
.unwrap(org.hibernate.query.query.class)
.setResultTransformer(Transformers.aliasToBean(ResultTo.class))
.getResultList();

此外,我建议你阅读这篇文章

你有指定的映射吗?这些都是注释足够了。。你能把最重要的部分放在斯巴顿吗?我不明白你能把整个堆栈跟踪包括进去吗?您是否能够在另一个工具中运行查询以检查其工作情况?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-很抱歉,我没有意识到这一点。我已经补充了答案的重要部分。