Struts+Spring+Hibernate を使用していますが、HQL を適切に実行するのに問題があります。
objectA、objectB、objectC、objectD の 4 つのオブジェクトがあります。オブジェクト A はオブジェクト B と 1 対多の関係にあり、ObjectB には FK ObjectA.Id があるため、それらは関連付けられています。このパターンはオブジェクト間で続きます。つまり、オブジェクト B はオブジェクト C と 1 対多の関係を持ちます。
私が今行っていることは、「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 オブジェクトで行う方法が明確ではありません。誰でも助けることができますか?ありがとう。