找不到address
列的两个可能原因:
其次,您的JOIN语句在sql上可能无效。有几种方法可以实现联接。我将采用直接方法(从两个表中进行选择,并在where子句中说明联接)。
假设该person
实体映射了一个名为“ TABLE_PERSON
”的表,并address
映射了“TABLE_ADDRESS
”表,则有效查询如下所示:
SELECT person.NAME, person.AGE, person.SEX,
address.STREET, address.CITY, address.STATE, address.ZIP
FROM TABLE_PERSON person, TABLE_ADDRESS address
WHERE person.ID = address.PERSON_ID
还有一点。查看休眠文档,我发现了以下示例:
List cats = sess.createsqlQuery("select {cat.*}, {kitten.*} from cats cat, cats kitten
where kitten.mother = cat.id").
setResultSetMapping("catandKitten").list();
因此,问题可能不在于查询本身,而在于您正在使用的resultSet映射以及引用字段的方式。
让我们假设这个映射(来自Hibernate文档):
<resultset name="personAddress">
<return alias="person" class="eg.Person"/>
<return-join alias="address" property="person.mailingAddress"/>
</resultset>
然后,例如,您的查询应定义大括号({}
)之间的列,并使用您在映射处定义的别名:
personList = session.createsqlQuery(
"SELECT {person.NAME}, {person.AGE}, {person.SEX}, "+
"{address.STREET}, {address.CITY}, {address.STATE}, {address.ZIP} "+
"FROM TABLE_PERSON person, TABLE_ADDRESS address "
"WHERE person.ID = address.PERSON_ID"
).setResultSetMapping("personAddress")
.list();
请告诉我这个例子是否可行。