多对多双向关联
老师和学生:
?
Annotation配置:
package com.zchen.hibernate.manytmany;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;@Entity@Table(name="T_TEACHER")public class Teacher {private int id;private String name;private Set<Student> students = new HashSet<Student>();@ManyToMany@JoinTable(name="T_S",joinColumns={@JoinColumn(name="TEACHER_ID")},inverseJoinColumns={@JoinColumn(name="STUDENT_ID")})public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}?
package com.zchen.hibernate.manytmany;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;import javax.persistence.Table;@Entity@Table(name="T_STUDENT")public class Student {private int id;private String name;private Set<Teacher> teachers = new HashSet<Teacher>();@ManyToMany(mappedBy="students")public Set<Teacher> getTeachers() {return teachers;}public void setTeachers(Set<Teacher> teachers) {this.teachers = teachers;}@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}?
Xml配置:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zchen.hibernate.manytmany"> <class name="Teacher" table="T_TEACHER"> <id name="id" column="ID"> <generator column="NAME"/> <set name="Students" table="T_S"> <key column="TEACHER_ID"></key> <many-to-many column="STUDENT_ID"/> </set> </class></hibernate-mapping>
?
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zchen.hibernate.manytmany"> <class name="Student" table="T_STUDENT"> <id name="id" column="ID"> <generator column="NAME"/> <set name="teachers" table="T_S"> <key column="STUDENT_ID"></key> <many-to-many column="TEACHER_ID"/> </set> </class></hibernate-mapping>
?
<?xml version="1.0"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory name=""> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///db_czbk_hibernate</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hbm2ddl.auto">create</property> <property name="current_session_context_class">thread</property> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <property name="show_sql">true</property> <!-- <mapping /> <mapping resource="com/zchen/hibernate/manytmany/Student.hbm.xml" /> </session-factory></hibernate-configuration>
?
package com.zchen.hibernate;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.Test;public class Snippet {@Testpublic void testSchemaExport(){new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);}}?