当前位置: 代码迷 >> J2EE >> hibernate 多对一查询有关问题
  详细解决方案

hibernate 多对一查询有关问题

热度:21   发布时间:2016-04-17 23:32:23.0
hibernate 多对一查询问题
一个文章表
一个评论表
一篇文章可以有多个评论,而一个评论只能对应一篇文章
关系图如下

用hibernate配置文件如下

article的配置文件


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.bean">
<class name="ArticleModel" table="article">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="body" column="body" />
<property name="likes" column="likes" />
<property name="create_time" column="create_time" />

<many-to-one name="user" class="UserModel" lazy="false">
<column name="user_id"></column>
</many-to-one>
<set name="imageSet" inverse="true" lazy="false">
<key column="article_id" />
<one-to-many class="ImageModel" />
</set>

<set name="commentSet" inverse="true" lazy="false">
<key column="article_id" />
<one-to-many class="CommentModel" />
</set>
</class>
</hibernate-mapping>


comment的配置文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.bean">

<class name="CommentModel" table="comment">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="body" column="body" />
<property name="create_time" column="create_time" />

<many-to-one name="article" class="ArticleModel" lazy="false">
<column name="article_id"></column>
</many-to-one>

<many-to-one name="user" class="UserModel" lazy="false">
<column name="user_id"></column>
</many-to-one>

<many-to-one name="parentComment" class="CommentModel"
lazy="false">
<column name="parent_id"></column>
</many-to-one>

<many-to-one name="rootComment" class="CommentModel" lazy="false">
<column name="root_id"></column>
</many-to-one>

<set name="commentGrandChildSet" inverse="true" lazy="false">
<key column="root_id" />
<one-to-many class="CommentModel" />
</set>

<set name="commentChildSet" inverse="true" lazy="false">
<key column="parent_id" />
<one-to-many class="CommentModel" />
</set>

</class>

</hibernate-mapping>

用hql查询的时候出问题了
用下面这句代码没错

String hql = "from ArticleModel article";

这句代码会生成多句sql语句
而下面这句生成的sql是错误的(去掉article.commentSet可以成功,构造函数什么的都写了)

String hql = "select new ArticleModel(article.body,"
+ "article.user,"
+ "article.create_time,"
+"article.commentSet)"
+ "from ArticleModel article";

而我想实现的需求是查询出来部分属性,所以第一句不符合需求啊,而下面那一句又报错,不知道该怎么写了
------解决思路----------------------
en ~ bu ke qi
  相关解决方案