找不到
address列的两个可能原因:
首先,在SQL中,您必须编写表的名称,而不是实体名称。
其次,您的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" /> <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();请告诉我这个例子是否可行。



