Theta Join を使用して、結果を 2 つのオブジェクトとして返す HQL クエリを簡単に作成できます (Adrian が指摘したように)。次に例を示します。
String queryText = "select address, photo from Address address, Photo photo "
+ " where address.personID=photo.personId";
List<Object[]> rows = session.createQuery(queryText).list();
for (Object[] row: rows) {
System.out.println(" ------- ");
System.out.println("Address object: " + row[0]);
System.out.println("Photo object: " + row[1]);
}
ご覧のとおり、クエリは、フェッチされた各行を表す Object[] 配列のリストを返します。この配列の最初の要素には 1 つのオブジェクトが含まれ、2 番目の要素には別のオブジェクトが含まれます。
編集:
左結合の場合、(HQL クエリではなく) ネイティブ SQL クエリを使用する必要があると思います。これを行う方法は次のとおりです。
String queryText = "select address.*, photo.* from ADDRESS address
left join PHOTO photo on (address.person_id=photo.person_id)";
List<Object[]> rows = sess.createSQLQuery(queryText)
.addEntity("address", Address.class)
.addEntity("photo", Photo.class)
.list();
これはあなたのケースでうまくいくはずです。