Hibernate多对多单向关联(一个many-to-many)
2009-12-16 20:26
435 查看
一个学生可以有多个老师,一个老师也可以有多个学生,所以老师和学生之间的关系就是多对多的关系,这样就需要建立一个中间的关联表来存储关联信息。
-- Create table
create table TEACHER
(
ID NUMBER(4) not null,
NAME VARCHAR2(100),
SOURCENAME VARCHAR2(100)
)
-- Create table
create table STUDENT
(
ID NUMBER(4) not null,
NAME VARCHAR2(100),
AGE NUMBER(4),
SEX VARCHAR2(100)
)
-- Create table
create table STUTEA
(
STUDENT_ID NUMBER(4) not null,
TEACHER_ID NUMBER(4) not null
)
测试类:
-- Create table
create table TEACHER
(
ID NUMBER(4) not null,
NAME VARCHAR2(100),
SOURCENAME VARCHAR2(100)
)
-- Create table
create table STUDENT
(
ID NUMBER(4) not null,
NAME VARCHAR2(100),
AGE NUMBER(4),
SEX VARCHAR2(100)
)
-- Create table
create table STUTEA
(
STUDENT_ID NUMBER(4) not null,
TEACHER_ID NUMBER(4) not null
)
package com.pojo; public class Student implements java.io.Serializable { private Long id; private String name; private Long age; private String sex; public Student() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Long getAge() { return this.age; } public void setAge(Long age) { this.age = age; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } }
package com.pojo; import java.util.HashSet; import java.util.Set; public class Teacher implements java.io.Serializable { private static final long serialVersionUID = -7640561034271065452L; private Long id; private String name; private String sourcename; //多对多单向关联 private Set<Student> students = new HashSet<Student>() ; public Teacher() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSourcename() { return this.sourcename; } public void setSourcename(String sourcename) { this.sourcename = sourcename; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
<?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> <!-- 多对多单向关联,table标识关联表,key里面column属性代表该类(Teacher)在关联表里面的键是teacher_id many-to-many 里面class属性是set里面的类型,后面的column是指该类在关联表里面的外键 outer-join="true" 外连接 cascade="save-update" 级联操作 --> <set name="students" table="stutea" outer-join="true" cascade="save-update"> <key column="teacher_id"></key> <many-to-many class="com.pojo.Student" column="student_id"/> </set> </class> </hibernate-mapping>
测试类:
package com.test; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import com.pojo.Card; import com.pojo.Person; import com.pojo.Student; 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(); Student s1 = new Student(); Student s2 = new Student(); s1.setName("张三"); s1.setAge(new Long(20)); s1.setSex("男"); s2.setName("小丽"); s2.setAge(new Long(20)); s2.setSex("女"); Set<Student> set = new HashSet<Student>(); set.add(s1); set.add(s2); Teacher t = new Teacher(); t.setName("王老师"); t.setSourcename("语文"); t.setStudents(set); try { //只需要save teacher,因为设置了cascade="save-update" 级联操作 session.save(t); HibernateManager.closeSession(); } catch (Exception e) { e.printStackTrace(); HibernateManager.rollbackTransaction(); } } }
相关文章推荐
- hibernate @OneToMany @ManyToOne 单向关联实体类非主键属性(以及包含多个属性关联)
- Hibernate之多对多单向关联(ManyToMany)
- hibernate学习4之one-to-many单向关联(不推荐)
- [Hibernate]基于xml和annotation的many-to-many单向关联【学习笔记】
- hibernate单向多对一关联映射(many-to-one)XML与注解版
- hibernate单向一对多关联映射(one-to-many)XML与注解版
- Hibernate单向一对多关联(Unidirectional One-To-Many)要点
- hibernate 多对一(Many-to-one)单向关联
- hibernate学习6之many-to-many单向关联
- Hibernate关系映射(四)一对多单向关联@OneToMany Annotation方式
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Hibernate之一对多单向外键关联(OneToMany)
- Hibernate 之many-to-one 单向多对一关联示例
- 单向关联的oneTomany练习
- Hibernate主键一对一关联映射实例【xml和注解版本@OneToOne@JoinColumn(name="wifeId")--主键单向】(十二)
- Hibernate关系映射(一)一对一单向外键关联@OneToOne Annotation方式
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
- 多对一关联映射(单向关联)见项目:me_many_to_one
- Hibernate基础之九:多对多,单/双向关联 @ManyToOne @OneToMany
- 014 一对多关联映射 单向(one-to-many)