我正在使用Struts + Spring + Hibernate,并且无法正常执行我的HQL。内部连接处于休眠状态(HQL)的问题
我有四个对象,objectA,objectB,objectC和objectD。对象A与对象B具有一对多关系,并且它们与ObjectB具有FK ObjectA.Id相关。这种模式继续通过对象,即对象B与对象C有一对多关系等。
我现在正在做的是调用“FROM ObjectXVO WHERE objectXId =?”获取对象列表。我的应用程序变得越来越复杂,所以我需要做一些更复杂的HQL。
基本上我需要的是,给定ObjectBVO.objectBId我需要返回给定ObjectB的ObjectA的某些列,给定ObjectB的一部分的ObjectC的某些列以及ObjectDs的所有列作为给定ObjectBs的一部分的ObjectC的一部分。
这是我在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
这是DAOimpl代码对象,我尝试使用返回列表< ObjectDVO>
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);
}
这只是抛出一个错误说空。我已经看过HQL文档和一些教程,但不清楚如何做更多的VO对象。谁能帮忙?谢谢。
感谢您的好评!我会试试这个,并将其标记为已回答,如果我可以得到它的工作。 – user1287523 2012-07-27 14:47:27
作品非常漂亮 – user1287523 2012-07-27 16:00:11