表结构
'CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
'CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
'CREATE TABLE `t_s` (
`t_id` int(11) NOT NULL,
`s_id` int(11) NOT NULL,
PRIMARY KEY (`t_id`,`s_id`),
KEY `FK_fnk3mfpvyt0fjhrlfob6aq836` (`s_id`),
KEY `FK_pwnxtyel9rk4o5hcppee64hv4` (`t_id`),
CONSTRAINT `FK_fnk3mfpvyt0fjhrlfob6aq836` FOREIGN KEY (`s_id`) REFERENCES `student` (`id`),
CONSTRAINT `FK_pwnxtyel9rk4o5hcppee64hv4` FOREIGN KEY (`t_id`) REFERENCES `teacher` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
Annotation方法
Student类
package hibernate.entities; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Student { private int id; private String name; private Set<Teacher> teachers = new HashSet<Teacher>(); @Id @GeneratedValue(strategy=GenerationType.AUTO) public 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; } @ManyToMany(mappedBy="students") public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } }
Teacher类
package hibernate.entities; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity public class Teacher { private int id; private String name; private Set<Student> students = new HashSet<Student>(); @Id @GeneratedValue(strategy=GenerationType.AUTO) public 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; } @ManyToMany @JoinTable( name="t_s", joinColumns=@JoinColumn(name="t_id"), inverseJoinColumns=@JoinColumn(name="s_id") ) public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
xml 方法
Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernate.entities"> <class name="Student"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="name" column="name"/> <set name="teachers" table="t_s"> <key column="s_id"></key> <many-to-many class="hibernate.entities.Teacher" column="t_id"/> </set> </class> </hibernate-mapping>
Teacher.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernate.entities"> <class name="Teacher"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="name" column="name"/> <set name="students" table="t_s"> <key column="t_id"></key> <many-to-many class="hibernate.entities.Student" column="s_id"/> </set> </class> </hibernate-mapping>