我要向一对父子表执行插入(事务)操作,其中父表的主键是用hibernate自动生成的。生成后执行查询获取新生成的主键,再用这个主键对子表进行插入。代码大概是下面的样子:父表的hbm.xml
<id name="Id" type="java.lang.Integer">
<column name="ID" />
<generator class="increment"></generator>
</id>执行过程如下
Session session = HibernateSessionFactory.getSession();
Transaction tr = session.getTransaction();
tr.begin();
初始化父表Dto
父表Dao.save();
查询父表新生成的主键 ☆
初始化子表Dto;
子表Dao.save();
tr.commit()问题是☆执行查询的时候,hibernate会自动flush,造成父表记录被提交,事务性被破坏。
另外,如果我用 session.setFlushMode(FlushMode.COMMIT); 设置成提交时才flush的模式,查询父表新主键时取到的是旧的值,导致后面插入子表时主键重复。第一次用hibernate开发,头大中。
有什么办法解决吗?谢谢
<id name="Id" type="java.lang.Integer">
<column name="ID" />
<generator class="increment"></generator>
</id>执行过程如下
Session session = HibernateSessionFactory.getSession();
Transaction tr = session.getTransaction();
tr.begin();
初始化父表Dto
父表Dao.save();
查询父表新生成的主键 ☆
初始化子表Dto;
子表Dao.save();
tr.commit()问题是☆执行查询的时候,hibernate会自动flush,造成父表记录被提交,事务性被破坏。
另外,如果我用 session.setFlushMode(FlushMode.COMMIT); 设置成提交时才flush的模式,查询父表新主键时取到的是旧的值,导致后面插入子表时主键重复。第一次用hibernate开发,头大中。
有什么办法解决吗?谢谢
解决方案 »
- 求教 oracle 递归查询
- 求解决Struts2在Action类里用Annotation,用DMI不能调用自定义方法
- J2EE 日程安排
- java定时器相关
- 为什么我用dao模式进行数据库操作,能查询内容却不能插入数据呢
- java和tomcat的环境配置
- hibernate高手请进??这个查询能不能实现??怎么用hql实现????/
- axis中,web方法的result中含有Object类型的问题,各位大侠帮忙啊.
- 极度郁闷,毕设结束,学校老师知道java的有x个,知道j2ee的有x-y个,知道mvc的…………
- WEB应用中的有状态会话bean的状态
- 请高手帮忙呀
- Sun Applcation Server简介
你若在配置文件中设置过这两个表的关系后(以一对多关系说明one-to-many)如:
主表类Classes(班级),字表类Student(学生)
类Classes中有属性private Set<Student> students;
现有stu1,stu2,stu3三个学生信息,class1一个班级
可以把stu1,stu2,stu3都放入class1的Set集合中
在<set >配置标签中加入级联cascade= "all" 注意不能再用inverse="true"
直接save(class1)就可以把他的子项3个学生信息都插入了
不知道我这样说。楼主明白么?