Hibernate的一对多配置中级联保存问题
来源:互联网 发布:开淘宝网店要押金吗 编辑:程序博客网 时间:2024/04/29 22:57
在Hibernate的一对多配置的级联保存中,1方和N方的实体类和关系映射文件都已经配置好,
N方Student实体类:
package cn.itcase.domain;public class Student {private String sid;private String sname;private int sage;private Teacher teac;public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public Teacher getTeac() {return teac;}public void setTeac(Teacher teac) {this.teac = teac;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public int getSage() {return sage;}public void setSage(int sage) {this.sage = sage;}}
N方Student.hbm.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="cn.itcase.domain.Student" table="student"><id name="sid" column="sid"><generator class="uuid" /></id><property name="sname" column="sname" ></property><property name="sage" column="sage" ></property><many-to-one name="teac" class="cn.itcase.domain.Teacher" column="t_id" /></class></hibernate-mapping>
1方Teacher实体类:
package cn.itcase.domain;import java.util.Set;public class Teacher {private String tid;private String tname;private String course;private Set<Student> stus;public String getTid() {return tid;}public void setTid(String tid) {this.tid = tid;}public String getTname() {return tname;}public void setTname(String tname) {this.tname = tname;}public String getCourse() {return course;}public void setCourse(String course) {this.course = course;}public Set<Student> getStus() {return stus;}public void setStus(Set<Student> stus) {this.stus = stus;}}
1方Teacher.hbm.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="cn.itcase.domain.Teacher" table="teacher"><id name="tid" column="tid"><generator class="uuid" /></id><property name="tname" column="tname" ></property><property name="course" column="course" ></property><set name="stus" ><key column="t_id" ></key><one-to-many class="cn.itcase.domain.Student"/></set></class></hibernate-mapping>
测试代码类:
package cn.itcase.hibernatetest;/** * 一对多操作中的级联保存 */import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.junit.Test;import cn.itcase.domain.Student;import cn.itcase.domain.Teacher;import cn.itcase.utils.HibernateUtils;public class HibernateO2MSave {@Testpublic void addDemo1() {SessionFactory sessionFactory=null;Session session = null;Transaction tx=null;try {sessionFactory = HibernateUtils.getSessionFactory();session=sessionFactory.openSession();tx = session.beginTransaction();//创建教师对象Teacher t1=new Teacher();t1.setTname("李老师");t1.setCourse("语文");//创建学生对象Student s1=new Student();s1.setSname("小明");s1.setSage(18);Student s2=new Student();s2.setSname("小李");s2.setSage(22);//建立教师对象和学生对象的双向联系t1.getStus().add(s1);t1.getStus().add(s2);s1.setTeac(t1);s2.setTeac(t1);//分别保存教师和学生对象session.save(t1);session.save(s1);session.save(s2);tx.commit();} catch (Exception e) {tx.rollback();} finally {session.close();sessionFactory.close();}}}
测试结果发现,Hibernate能自动在数据库里面创建student表和teacher表而且两个表见的联系也存在,可是测试中的一条教师记录以及和这条教师记录关联的学什么记录无法插入数据库,也没有错误异常信息
排查过程:
单独插入教师记录和学生记录都成功了,手动在数据库中插入教师和学生记录并建立练习没有问题
后来发现,在Teacher的实体类中,用了记录何其有联系的学生记录的Set集合,需要示例化
阅读全文
0 0
- Hibernate的一对多配置中级联保存问题
- hibernate一对多、多对多级联保存与级联删除与修改外键
- hibernate框架一对多级联保存例子(十二)
- hibernate多对多级联保存
- hibernate一对多配置
- hibernate一对多配置
- Hibernate一对多关系的配置
- Hibernate的一对多单向配置
- Hibernate 一对多问题
- hibernate里面的一对多的问题
- Hibernate 中一对多的 注解 问题
- 关于hibernate一对多配置
- HIBERNATE一对多映射配置
- hibernate配置一对多关系
- hibernate配置一对多关系
- hibernate 一对多配置排序
- HIBERNATE一对多配置实例
- Hibernate一对多映射配置
- 数据结构——第五讲、树(下)(2)
- 图像“抖动”原理
- C++类和对象
- [spring mvc踩坑填坑]spring mvc+hibernate实现分页
- melody websocket 使用
- Hibernate的一对多配置中级联保存问题
- 在spring mvc项目中实现登录账号单点登录
- 日常(身怀绝技的大家)
- 2017国庆郑州集训Day4、5、6
- nihao ,sssss
- 7.简单的自定义函数
- AngularJS所有版本下载地址
- java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。
- Unity3D 自动打包整个项目(以AssetBundle实现)