创建一个小的例子:
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());
}
}
经过上述过程即可实现单向多对多的关系映射测试。