創建一個小的例子:
1、創建數據庫本例使用sql sever 2008 r2數據庫。
Teacher—student表:
Teacher表
student表
2、在myeclipse中使用反向工程生成實體類
student實體類代碼
package com.wxb.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Student entity.
* @author 王校兵
* @version 1.0,2015-11-28
*/
@Entity
@Table(name = "Student")
public class Student implements java.io.Serializable {
// Fields
private Integer sid;
private String sname;
private Set<Teacher> teacher = new HashSet<Teacher>();
// Constructors
/** default constructor */
public Student() {
}
/** full constructor */
public Student(String sname) {
this.sname = sname;
}
// Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "Sid")
public Integer getSid() {
return this.sid;
}
@Column(name = "Sname", nullable = false)
public String getSname() {
return this.sname;
}
// 定義該Person實體所有關聯的Address實體
@ManyToMany(targetEntity = Teacher.class)
// 映射連接表爲Teacher_Student
@JoinTable(name = "Teacher_Student",
// 定義連接表中名爲person_id的外鍵列,該外鍵列參照當前實體對應表的主鍵列
joinColumns ={ @JoinColumn(name = "Sid") },
//翻轉與
inverseJoinColumns = @JoinColumn(name = "Tid")
)
public Set<Teacher> getTeacher() {
return teacher;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public void setSname(String sname) {
this.sname = sname;
}
public void setTeacher(Set<Teacher> teacher) {
this.teacher = teacher;
}
}
teacher表
package com.wxb.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Teacher entity.
* @author 王校兵
* @version 1.0,2015-11-28
*/
@Entity
@Table(name = "Teacher")
public class Teacher implements java.io.Serializable {
// Fields
private Integer tid;
private String tname;
// private Set<Student> student = new HashSet<Student>();
/** default constructor */
public Teacher() {
}
/** full constructor */
public Teacher(String tname) {
this.tname = tname;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "Tid", unique = true, nullable = false)
public Integer getTid() {
return this.tid;
}
@Column(name = "Tname", nullable = false)
public String getTname() {
return this.tname;
}
public void setTid(Integer tid) {
this.tid = tid;
}
public void setTname(String tname) {
this.tname = tname;
}
}
3、實現單向多對多測試類
向數據庫中插入數據測試
package com.wxb.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.wxb.model.Student;
import com.wxb.model.Teacher;
import com.wxb.util.HibernateSessionFactory;
/**
* 單向多對多關聯映射測試類
* @author 王校兵
* @version 1.0, 2015-11-28
* */
public class SingleNToNDao {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Transaction ts = session.beginTransaction();
Student s = new Student();
s.setSname("測試");
session.save(s);
Teacher t1 = new Teacher();
Teacher t2 = new Teacher();
Teacher t3 = new Teacher();
t1.setTname("1");
t2.setTname("2");
t3.setTname("3");
s.getTeacher().add(t1);
session.save(t1);
s.getTeacher().add(t2);
session.save(t2);
ts.commit();
}
}
讀取數據庫中的dao
package com.wxb.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.wxb.model.Student;
import com.wxb.model.Teacher;
import com.wxb.util.HibernateSessionFactory;
/**
* 單向一對多關係映射測試類
* @author 王校兵
* @version 1.0, 2015-11-28
* */
public class ReadSingleNToNDao {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Transaction ts = session.beginTransaction();
Student s = (Student)session.get(Student.class, 2);
System.out.println(s.getSname());
for(Teacher t:s.getTeacher()){
System.out.println(t.getTname());
}
Teacher tt = (Teacher) session.get(Teacher.class, 3);
System.out.println(tt.getTname());
}
}
經過上述過程即可實現單向多對多的關係映射測試。