Hibernate多对多单向关联(2个一对多)

把多对多分割成2个一对多,一般情况下,单向关联比较多!

分割的话则生成的持久类需要3个,包括关联表!

学生类,和关联表一对多,

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.pojo.Student" table="STUDENT" schema="ZM"> <id name="id" type="java.lang.Long"> <column name="ID" precision="4" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="100" /> </property> <property name="age" type="java.lang.Long"> <column name="AGE" precision="4" scale="0" /> </property> <property name="sex" type="java.lang.String"> <column name="SEX" length="100" /> </property> </class> </hibernate-mapping>

老师类,和学生以及关联表都是一对多的关系

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.pojo.Teacher" table="TEACHER" schema="ZM"> <id name="id" type="java.lang.Long"> <column name="ID" precision="4" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="100" /> </property> <property name="sourcename" type="java.lang.String"> <column name="SOURCENAME" length="100" /> </property> <!-- 一对多关系 --> <set name="stuteas" inverse="true" cascade="save-update"> <key> <column name="TEACHER_ID" precision="4" scale="0" not-null="true" /> </key> <one-to-many class="com.pojo.Stutea" /> </set> </class> </hibernate-mapping>

关联表,由于关联表没有ID主键,而是符合主键。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.pojo.Stutea" table="STUTEA" schema="ZM"> <composite-id> <!-- 组合主键 --> <key-many-to-one name="student" class="com.pojo.Student"> <column name="STUDENT_ID" precision="4" scale="0" /> </key-many-to-one> <key-many-to-one name="teacher" class="com.pojo.Teacher"> <column name="TEACHER_ID" precision="4" scale="0" /> </key-many-to-one> <key-property name="stunumber" type="java.lang.Long"> <column name="STUNUMBER" precision="4" scale="0" /> </key-property> </composite-id> </class> </hibernate-mapping>

测试类:

package com.test; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import com.pojo.Student; import com.pojo.Stutea; import com.pojo.Teacher; import com.util.HibernateManager; public class Test4 { public static void main(String[] args) { Test4.addPerson(); } public static void addPerson() { Session session = HibernateManager.openSession(); //老师 Teacher t = new Teacher() ; t.setName("王老师") ; t.setSourcename("语文老师") ; //获取2个学生对象 Student s1 = (Student)session.get(Student.class, new Long(1)) ; Student s2 = (Student)session.get(Student.class, new Long(2)) ; Stutea sa1 = new Stutea() ; Stutea sa2 = new Stutea() ; //学生和关联表 sa1.setStudent(s1) ; sa1.setTeacher(t) ; sa1.setStunumber(new Long(100)) ; sa2.setStudent(s2) ; sa2.setTeacher(t) ; sa2.setStunumber(new Long(100)) ; Set<Stutea> st = new HashSet<Stutea>() ; st.add(sa1) ; st.add(sa2) ; //老师和关联表 t.setStuteas(st) ; try { //只需要save teacher,因为设置了cascade="save-update" 级联操作 session.save(t); HibernateManager.closeSession(); } catch (Exception e) { e.printStackTrace(); HibernateManager.rollbackTransaction(); } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值