<!--

如何去合理设置条件,帮助hibernate系统得到属于这个post的所有的reply?
1. table="forumreply"
select * from forumreply

2. <key column="post_id"></key>
这是一个过滤条件
select * from forumreply where post_id=@forumpost.postId

3. <one-to-many class="ForumReply"/>
把前二步的查询所得到的记录,按照ForumReply这个类的映射机制来封装成ForumReply对象。

4. cascade="all"
级联操作,当系统对forumpost做操作的时候,也将一起对forumreply做操作。

5. inverse="true"
代表关系的维护动作转交给对象

6. fetch="join"
代表该属性的获取模式 ,如果没有设置,多方往往是新开一条语句来获取。

7. lazy="true"
懒惰加载技术,多方往往数量众多,加载一方的时候,我们一般可以不加载多方, 但加载某个多方的记录,往往一方要一并取出来。
懒惰加载技术有利于提高性能,只有发现确实需要加载多方的时候采取执行SQL语句,执行对象的加载。
lazy="true"是默认值
-->
<set name="replys" table="forumreply" cascade="all" inverse="true" fetch="join" lazy="true">
  <key column="post_id"></key>      <!-- 外键 : forum_reply这张表的外键字段名-->
  <one-to-many class="ForumReply"/>   <!-- 封装方式 -->
</set>

public void testAddForumPost() throws Exception{ForumPost post = new ForumPost();post.setPostContent("昨天听说PX装置爆炸了?");post.setPostName("有没有污染?");post.setPostTime(new Date());ForumReply reply1= new ForumReply();reply1.setReplyContent("漳州的,我这里距离很远!");reply1.setReplyTime(new Date());ForumReply reply2= new ForumReply();reply2.setReplyContent("不知道啊,应该还好!");reply2.setReplyTime(new Date());        post.getReplys().add(reply1); post.getReplys().add(reply2);reply1.setPost(post);      //多的一方要维护关系,添加外键reply2.setPost(post);Transaction trans = session.beginTransaction();try{session.save(post);trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}public void testLoadForumPost() throws Exception{Transaction trans = session.beginTransaction();try{ForumPost post=(ForumPost)session.get(ForumPost.class, 2);System.out.println("post name:"+post.getPostName()+",reply count:"+post.getReplys().size());trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}public void testLoadAllForumPosts() throws Exception{Transaction trans = session.beginTransaction();try{String hql="from ForumPost f  order by f.postId desc";List<ForumPost> forumPostList=session.createQuery(hql).list();System.out.println("post list count:"+forumPostList.size());if(forumPostList.size()>1)forumPostList.get(0).getReplys().size();trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}    public void testUpdateForumPost() throws Exception{Transaction trans = session.beginTransaction();try{ForumPost post=(ForumPost)session.get(ForumPost.class, 2);post.setPostName(post.getPostName()+"~bacdefg");Set<ForumReply> replys = post.getReplys();for(ForumReply reply:replys)reply.setReplyContent(reply.getReplyContent()+"123456");session.saveOrUpdate(post);trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}public void testRemoveForumPost() throws Exception{Transaction trans = session.beginTransaction();try{ForumPost post=(ForumPost)session.load(ForumPost.class, 1);session.delete(post);trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}public void testRemoveForumReply() throws Exception{Transaction trans = session.beginTransaction();try{ForumPost post=(ForumPost)session.get(ForumPost.class, 2);ForumReply reply = (ForumReply)post.getReplys().toArray()[0];post.getReplys().remove(reply);      //多方删除也要在一方删除System.out.println(post.getReplys().size());reply.setPost(null);session.delete(reply);trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();}}    public void testLoadSpecialPost() throws Exception{Transaction trans = session.beginTransaction();try{String hql="from ForumPost fp where fp.postId in (select distinct post.postId from ForumReply fr where fr.replyContent like '%不%')";List<ForumPost> forumPosts=(List<ForumPost>) session.createQuery(hql).list();for(ForumPost post:forumPosts){System.out.println("post id:"+post.getPostId()+",post name:"+post.getPostName()+",reply count:"+post.getReplys().size());session.delete(post);}trans.commit();}catch(HibernateException e){trans.rollback();e.printStackTrace();throw new Exception(e);}}

  

转载于:https://www.cnblogs.com/QinH/p/4411242.html

Hiberate--one to many相关推荐

  1. 掌握hiberate核心就够了

    掌握hiberate核心就够了 掌握hiberate核心就够了 前言 hibernate里数据的三种状态 概述 1.TestTransient 2.TestPersistent01 3.TestPer ...

  2. windows 下 MyEclipse 逆向工程生成hiberate 对应配置文件以及 javaBean。

    步骤1: 右边工具栏 ->  右击你的项目 -> 选中 MyEclipse  -> Project Facets -> install Hibernate Facet -> ...

  3. Hiberate中Update和Merge的一个小的区别

    1.Update和Merge的一个小区别总结 Update方法:如果要更新的对象是持久态而且在DirtyCheck的时候没有发现改变,那么就不发Update语句.如果更新的对象是游离态即使对象没有改变 ...

  4. Spring+Hiberate 多数据源的网文整理

    解决方案: http://www.th7.cn/Program/java/2011/10/23/44664.shtml 分析共享Spring配置数据源四种方式(附相应jar包)  :http://ww ...

  5. Hiberate CRUD操作

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void ...

  6. Hiberate 级联操作(cascade,many-to-one,one-to-many,many-to-many)

    使用的数据 建表语句 CREATE DATABASE Hibernate02; USE Hibernate02; CREATE TABLE `cut_customer`( `cust_id` bigi ...

  7. JBPM4常见错误汇总

    1.在tomcat6.0下布署错误    基于JBPM4的web项目jsp页面发布出错 现象: javax.servlet.ServletException: java.lang.LinkageErr ...

  8. java开发都需要学什么

    1.java基础 2.JSP+Servlet+JavaBean 环节主要 懂流程 MVC而已 别往深了研究 现 开发基本 用 模式 3.Struts+Hibernate+Spring 才 开发 主流技 ...

  9. Hibernate的简单应用

    Hibernate 是一个数据层的框架 所谓框架就是提高写代码的效率 他也是ORM(对象关系映射的实现 ) 里面提供了一些方言(不同数据库设置不同的方言)---跨数据库 还提供了缓存来提高查询效率 主 ...

  10. 关于锁机制:数据库锁

    一.什么是锁机制?数据库为什么要会有锁机制 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确 ...

最新文章

  1. 网络管理员&MCSE2003之5:第1章 帐户和资源管理
  2. 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs
  3. Linux中关于useradd、chmod、chown、getfacl、setfact等权限设置
  4. 发布dotNetCore程序到Kubernetes
  5. Linux一定需要文件系统吗?
  6. python2.7是什么_python2.7是什么
  7. 202.linux系统相关函数
  8. RTMP流媒体播放过程
  9. (微信小程序)二 : 创建一个页面
  10. ibm336服务器显示brd,ibmx3850x5服务器故障BRD报警|升级主板微码
  11. 印刷点阵字体_印刷术—类型族,分类和组合字体
  12. 电子科技大学计算机学生水平,近三年的学生评价结果-电子科技大学.DOC
  13. 数据挖掘常用算法整理
  14. 5G消息应用号推荐|官方种草清单第六期
  15. 小程序里显示店铺地址,可在地图上查看,可点击导航到店铺
  16. 1命名规则 sentinel_哨兵-1A数据命名规则
  17. 什么叫做html属性,什么是html属性
  18. 数据库管理 │ 浅谈从集中式到分布式数据库的转型要点
  19. 世界著名的品牌啤酒——网络整理X
  20. 使用Java编写《拳皇97》,致敬经典,还原八神庵大战草稚京

热门文章

  1. kgtemp文件转换mp3_amr转换mp3格式文件
  2. requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式...
  3. c语言exit_C语言实现2048
  4. python windows服务_Python创建Windows服务
  5. 在html中超链接_4.html5中超链接
  6. java转net_将java库转换为.net库
  7. java综合项目推荐,推荐20个5月最热门的Java开源项目
  8. 什么叫开关电源?捏碎了喂给你吃!
  9. 手把手教你研发属于自己的智能无人机
  10. java二叉树的实现_二叉树的实现(Java语言描述)