请教hql一对多表查询问题

abcxiaoye 2015-01-25 10:18:03
建了三个表tb_directory(id,name),tb_category(id,directoryId,..),tb_info(id,categoryId,...)并建立一对多关系。

<hibernate-mapping package="com.lyq.persistence">
<class name="Directory" table="tb_directory">
<!-- 主键 -->
<id name="id">
<generator class="native"/>
</id>
<property name="name" length="50"/>
<!-- 一对多关系 -->
<set name="directs" inverse="true" cascade="all" order-by="directoryId">
<key column="directoryId"/>
<one-to-many class="Category"/>
</set>
</class>
</hibernate-mapping>

建立Directory实体的set/get
private int id; //id号
private Set directs; //与主类别级联



<hibernate-mapping package="com.lyq.persistence">
<class name="Category" table="tb_category">
<!-- 主键 -->
<id name="id">
<generator class="native"/>
</id>
<property name="name" not-null="true" length="100"/>

<!-- 与主类别的多对一关系 -->
<many-to-one name="directs" column="directoryId" cascade="save-update"/>

<!-- 与详细信息的一对多关系 -->
<set name="meds" inverse="true" cascade="all" order-by="categoryId">
<key column="categoryId"/>
<one-to-many class="Info"/>
</set>

</class>
</hibernate-mapping>

建立Category实体的set/get
private int id; //id号
private Set meds; //与详细信息关联
private Directory directs;//与主类别级联

<class name="Info" table="tb_info">
<!-- 主键 -->
<id name="id">
<generator class="native"/>
</id>
<property name="title" not-null="true" />
<!-- 与类别的多对一关系 -->
<many-to-one name="cates" column="categoryId" cascade="save-update" lazy="proxy"/>
</class>
</hibernate-mapping>

建立Info实体的set/get
private int id; //id号
private Category cates; //与子类别级联

现在我想查询通过tb_directory表中的id=9这个条件,查询tb_info表相关信息,接下来怎么写代码?谢谢!!
...全文
198 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小生--幻 2015-01-27
  • 打赏
  • 举报
回复
select from Info i,Directory d,Category c where i.categoryId=c.id and c.directoryId=d.id 好像是这样
abcxiaoye 2015-01-26
  • 打赏
  • 举报
回复
谢谢!这样不行啊,肯定要用到联合查询或嵌套查询,只不过不知道怎么写
飘飘哥 2015-01-26
  • 打赏
  • 举报
回复
List infolist=dao.findByHQL("from Info where id=9") 不是这样?
abcxiaoye 2015-01-25
  • 打赏
  • 举报
回复
我是这样想的,先
	public List findByHQL(String hql){
		List list = null;
		try {
			session = HibernateFilter.getSession();		//获取Session对象
			session.beginTransaction();					//开启事物
			list = session.createQuery(hql)				//创建Query对象
						  .list();						//返回结果集
			session.getTransaction().commit();			//提交事物
		} catch (Exception e) {
			e.printStackTrace();						//打印异常信息
			session.getTransaction().rollback();		//回滚事物
		}
		return list;
	}
然后调用这个方法 List infolist=dao.findByHQL(from Info where??)//这里就不知道怎么设置条件查询了,请教高手,谢谢!!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧