我正在使用 Struts+Spring+Hibernate,我无法让我的 HQL 正确执行。
我有四个对象,objectA、objectB、objectC 和 objectD。对象 A 与对象 B 具有一对多关系,并且它们是相关的,因为 ObjectB 具有 FK ObjectA.Id。这种模式在对象中继续存在,即对象 B 与对象 C 等具有一对多的关系。
我现在一直在做的是调用“FROM ObjectXVO WHERE objectXId =?” 获取对象列表。我的应用程序变得越来越复杂,所以我需要做一些更复杂的 HQL。
基本上我需要的是,给定 ObjectBVO.objectBId 我需要返回具有给定 ObjectB 的 ObjectA 的某些列,作为给定 ObjectB 一部分的 ObjectC 的某些列,以及作为 ObjectC 一部分的 ObjectD 的所有列它们是给定 ObjectB 的一部分。
这是我在 Microsoft SQL Server 中使用的 SQL 语句。它正在工作,希望能展示我的模型。
SELECT ObjectB.ObjectBID, ObjectB.ObjectBName, ObjectC.ObjectCDescription,
ObjectD.*, ObjectA.ObjectAID
FROM ObjectB, ObjectC, ObjectD, ObjectA
WHERE ObjectB.ObjectBID = 2
AND ObjectA.ObjectAID = ObjectB.ObjectAID
AND ObjectB.ObjectBID = ObjectC.ObjectBID
AND ObjectD.ObjectCID = ObjectC.ObjectCID
这是我试图用来返回 List< ObjectDVO > 的 DAOimpl 对象中的代码
List<ObjectDVO> objectDs;
try{
String hql = "SELECT ObjectBVO.objectBId, ObjectBVO.objectBName,
ObjectCVO.objectCDescription, ObjectCVO.objectCId,"
+" ObjectAVO.objectAId, ObjectAVO.objectAName, ObjectDVO"
+" FROM ObjectBVO, ObjectAVO, ObjectCVO, ObjectDVO"
+" WHERE ObjectBVO.objectBId = ?"
+" AND ObjectAVO.objectAId = ObjectBVO.objectAId"
+" AND ObjectBVO.objectBId = ObjectCVO.objectBId"
+" AND ObjectDVO.objectCId = ObjectCVO.objectCId";
objectDs = getHibernateTemplate().find(hql, objectBID);
}
这只是抛出一个错误,说 null。我查看了 HQL 文档和一些教程,但还不清楚如何执行更多多个 VO 对象。任何人都可以帮忙吗?谢谢。