JPA之ManyToMany映射的示例

示例代码如下:

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()); } } }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值