iteye_2890
iteye_2890
2009-12-03 16:40

hql 别名问题请教

已采纳

有个BookComment类的映射文件如下

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.brucefeng.sinter.domain">
  <class name="BookComment" table="comment">
    <id name="bookCommentPK" column="commentpk">
        <generator class="uuid.hex"></generator>
    </id>
    <property name="title" type="string" column="title"></property>
    <property name="content" type="text" column="content"></property>
    <many-to-one name="author" column="userpk" 
    class="org.brucefeng.sinter.domain.User" 
    cascade="save-update" fetch="join" lazy="false"></many-to-one>
  </class>
</hibernate-mapping>

 在查询的时候使用下列语句

String hql = "from BookComment as bc where bc.userpk=:author order by bc.title asc";

 执行代码时出现如下问题:

org.hibernate.QueryException: could not resolve property: userpk of: org.brucefeng.sinter.domain.BookComment [from org.brucefeng.sinter.domain.BookComment as bc where bc.userpk=:author order by bc.title asc]

 

谢谢。


问题补充:
当将hql语句修改为

String hql = "from BookComment where userpk=:author order by title asc

后可以顺利查询出结果
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • Ryankay Ryankay 12年前

    [code="xml"]
    class="org.brucefeng.sinter.domain.User"
    cascade="save-update" fetch="join" lazy="false">

    [/code]

    [quote] name="author" [/quote]

    所以应该用[color=red]bc.author[/color]而不是[color=red]bc.userpk[/color]

    点赞 评论 复制链接分享
  • Ryankay Ryankay 12年前

    [code="java"]
    String hql = "from BookComment as bc where bc.author =:author order by bc.title asc";

    [/code]

    这样才对。hql应该使用xml里配置的name而不是column。其它都对。

    点赞 评论 复制链接分享
  • iteye_1764 iteye_1764 12年前

    应该不是别名的问题,author 是另外一个表中的字段,并不在当前表中。
    要么就是userpk是一个实体类中的对象,不能直接点出对象的,要点到他的下一级属性

    点赞 评论 复制链接分享

相关推荐