您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何用源代码编写hbm.xml文件中的此SQL查询?

如何用源代码编写hbm.xml文件中的此SQL查询?

找不到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" 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();

请告诉我这个例子是否可行。

SQLServer 2022/1/1 18:52:42 有394人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶