示例代码如下:
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="OneToOnePU" transaction-type="JTA">
<jta-data-source>java:/MySqlDS</jta-data-source>
<properties><property name="hibernate.hbm2ddl.auto" value="create-drop"/></properties>
</persistence-unit>
</persistence>
=================================================================
Student.java:
package com.cecltd.domain;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table(name = "Student")
public class Student implements Serializable {
private Integer studentid;
private String StudentName;
private Set
teachers = new HashSet
();
public Student() {}
public Student(String studentName) {
StudentName = studentName;
}
@Id
@GeneratedValue
public Integer getStudentid() {
return studentid;
}
public void setStudentid(Integer studentid) {
this.studentid = studentid;
}
@Column(nullable=false, length=32)
public String getStudentName() {
return StudentName;
}
public void setStudentName(String studentName) {
StudentName = studentName;
}
@ManyToMany(mappedBy = "students")
public Set
getTeachers() {
return teachers;
}
public void setTeachers(Set
teachers) {
this.teachers = teachers;
}
}
Teacher.java:
package com.cecltd.domain;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table(name = "Teacher")
public class Teacher implements Serializable{
private Integer teacherid;
private String TeacherName;
private Set
students = new HashSet
();
public Teacher() {}
public Teacher(String teacherName) {
TeacherName = teacherName;
}
@Id
@GeneratedValue
public Integer getTeacherid() {
return teacherid;
}
public void setTeacherid(Integer teacherid) {
this.teacherid = teacherid;
}
@Column(nullable=false, length=32)
public String getTeacherName() {
return TeacherName;
}
public void setTeacherName(String teacherName) {
TeacherName = teacherName;
}
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "studentid")})
public Set
getStudents() {
return students;
}
public void setStudents(Set
students) {
this.students = students;
}
public void addStudent(Student student) {
if (!this.students.contains(student)) {
this.students.add(student);
}
}
public void removeStudent(Student student) {
this.students.remove(student);
}
}
TeacherDAO.java:
package com.cecltd.ejb3;
import com.cecltd.domain.Student;
import com.cecltd.domain.Teacher;
public interface TeacherDAO {
public void insertTeacher(String name, String[] studentnames);
public Teacher getTeacherByID(Integer teacherid);
public Student getStudentByID(Integer studentid);
}
TeacherDAOBean.java:
package com.cecltd.ejb3.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.cecltd.domain.Student;
import com.cecltd.domain.Teacher;
import com.cecltd.ejb3.TeacherDAO;
@Stateless
@Remote ({TeacherDAO.class})
public class TeacherDAOBean implements TeacherDAO {
@PersistenceContext
protected EntityManager em;
public void insertTeacher(String name, String[] studentnames) {
Teacher teacher = new Teacher(name);
if (studentnames!=null){
for(String sn : studentnames){
teacher.addStudent(new Student(sn));
}
}
em.persist(teacher);
}
public Teacher getTeacherByID(Integer teacherid) {
Teacher teacher= em.find(Teacher.class, teacherid);
if (teacher!=null) teacher.getStudents().size();
return teacher;
}
public Student getStudentByID(Integer studentid) {
Student student= em.find(Student.class, studentid);
if (student!=null) student.getTeachers().size();
return student;
}
}
===============================================================
测试代码:
ManyToManyClient.java:
package test;
import java.util.Iterator;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.cecltd.domain.Student;
import com.cecltd.domain.Teacher;
import com.cecltd.ejb3.TeacherDAO;
public class ManyToManyClient {
public static void main(String[] args) throws NamingException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);
try {
TeacherDAO teacherdao = (TeacherDAO) ctx.lookup("TeacherDAOBean/remote");
teacherdao.insertTeacher("李老师",new String[]{"张小红","朱小光","龚利"});
Teacher teacher = teacherdao.getTeacherByID(new Integer(1));
if (teacher!=null){
System.out.println("======= 获取编号为1的老师姓名:"+ teacher.getTeacherName() +" ======");
Iterator iterator = teacher.getStudents().iterator();
while (iterator.hasNext()){
Student student = (Student) iterator.next();
System.out.println(" 他的学生:"+ student.getStudentName());
}
}else{
System.out.println("没有找到编号为1的老师
");
}
Student student = teacherdao.getStudentByID(new Integer(1));
if (student!=null){
System.out.println("======= 获取编号为1的学生姓名:"+ student.getStudentName() +" ======");
Iterator iterator = student.getTeachers().iterator();
while (iterator.hasNext()){
Teacher tc = (Teacher) iterator.next();
System.out.println(" 他的老师:"+ tc.getTeacherName());
}
}else{
System.out.println("没有找到编号为1的学生
");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}