第十六章 JPA关联关系

    类与类最直接的关系就是关联关系

 

多对一,一对多:双项

package com.entity;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

/*
 *  班级表映射学生表:一对多
 */
@Entity
public class Classs {
	private int sno;
	private String cname;
	private List<Student> students;
	public Classs() {
		super();
	}
	public Classs(int sno, String cname, List<Student> students) {
		super();
		this.sno = sno;
		this.cname = cname;
		this.students = students;
	}
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public int getSno() {
		return sno;
	}
	public void setSno(int sno) {
		this.sno = sno;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	/*
	 * 体现一对多的关系,会在Student表添加cid字段,
	 * 通过cid建立两个表之间的关系,student表不需要注明关系 
	 * 	两表都有注解注明关系则为双项连接,可以相互连接查询	
	 */
	@JoinColumn(name="cid")
	@OneToMany
	public List<Student> getStudents() {
		return students;
	}
	public void setStudents(List<Student> students) {
		this.students = students;
	}
	
	@Override
	public String toString() {
		return "Classs [sno=" + sno + ", cname=" + cname + "]";
	}
}
package com.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

/*
 *  学生表映射班级:多对一
 */
@Entity
public class Student {
	private int stuno;
	private String sname;
	private int score;
	private Classs classs;
	public Student() {
		super();
	}
	public Student(int stuno, String sname, int score, Classs classs) {
		super();
		this.stuno = stuno;
		this.sname = sname;
		this.score = score;
		this.classs = classs;
	}
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public int getStuno() {
		return stuno;
	}
	public void setStuno(int stuno) {
		this.stuno = stuno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	/*
	 * 体现多对一的关系,会在Student表添加cid字段,
	 * 通过cid建立两个表之间的关系,classs表不需要注明关系
	 * 两表都有注解注明关系则为双项连接,可以相互连接查询	 	
	 */
	@JoinColumn(name="cid")
	@ManyToOne
	public Classs getClasss() {
		return classs;
	}
	public void setClasss(Classs classs) {
		this.classs = classs;
	}
	
	@Override
	public String toString() {
		return "Student [stuno=" + stuno + ", sname=" + sname + ", score="
				+ score + "]";
	}
}
package com.test;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import com.entity.Classs;
import com.entity.Student;


/*
 * 测试关系连接
 */
public class Test {
	public static void main(String[] args) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa");
		EntityManager em = emf.createEntityManager();
		EntityTransaction et = em.getTransaction();
		et.begin();
		// 多对一 : 查询学生信息,会通过cid关系(关系建立在学生表:@ManyToOne),将查询出来的班级信息保存在对象中
		Student stu = em.find(Student.class, 1);
		// 获取学生对象中班级信息
		Classs stuC = stu.getClasss();
		System.out.println(stuC);
		
		// 一对多:查询班级信息,会通过cid关系(关系建立在班级表:@OneToMany),将查询出来的信息保存在对象中
		Classs cls= em.find(Classs.class, 1);
		// 获取班级对象中学生信息
		List<Student> cStus = cls.getStudents();
		System.out.println(cStus);

		et.commit();
		em.close();
		emf.close();
	}
}

 

多对多

package com.entity;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
/*
 * 	员工表:一个员工可以有多个项目
 */
@Entity
public class Emp {
	private int empno;
	private String ename;
	private List<Project> pros;
	public Emp() {
		super();
	}
	public Emp(int empno, String ename, List<Project> pros) {
		super();
		this.empno = empno;
		this.ename = ename;
		this.pros = pros;
	}
	
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	@ManyToMany(targetEntity=Project.class)
	public List<Project> getPros() {
		return pros;
	}
	public void setPros(List<Project> pros) {
		this.pros = pros;
	}
	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + "]";
	}
}
package com.entity;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

/*
 * 	项目表:一个项目可以有多个员工
 */
@Entity
public class Project {
	private int pno;
	private String pname;
	private List<Emp> emps;
	public Project() {
		super();
	}
	public Project(int pno, String pname, List<Emp> emps) {
		super();
		this.pno = pno;
		this.pname = pname;
		this.emps = emps;
	}
	
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public int getPno() {
		return pno;
	}
	public void setPno(int pno) {
		this.pno = pno;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	@ManyToMany(targetEntity=Emp.class)
	public List<Emp> getEmps() {
		return emps;
	}
	public void setEmps(List<Emp> emps) {
		this.emps = emps;
	}
	@Override
	public String toString() {
		return "Project [pno=" + pno + ", pname=" + pname + "]";
	}	
}
package com.test;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import com.entity.Emp;
import com.entity.Project;



/*
 * 测试关系连接
 */
public class Test {
	public static void main(String[] args) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa");
		EntityManager em = emf.createEntityManager();
		EntityTransaction et = em.getTransaction();
		et.begin();
		/*
		 *  员工:zhang  wang  li
		 *  项目:A   B
		 *  
		 *  A项目:zhang  wang
		 * 	B项目:li  wang
		 */
		
		// 创建员工
		Emp zhang = new Emp(0, "zhang", null);
		Emp wang = new Emp(0, "wang", null);
		Emp li = new Emp(0, "li", null);
		// 将员工存入数据库,但是员工所在项目为空
		em.persist(zhang);
		em.persist(wang);
		em.persist(li);
		
		// 整合项目所需人员
		List<Emp> A_emp = new ArrayList<Emp>();
		A_emp.add(zhang);
		A_emp.add(wang);
		List<Emp> B_emp = new ArrayList<Emp>();
		B_emp.add(li);
		B_emp.add(wang);
		
		// 创建项目
		Project A = new Project(0, "A", A_emp);
		Project B = new Project(0, "B", B_emp);
		// 将项目和项目所需对应员工信息存入数据库
		em.persist(A);
		em.persist(B);
		
		//整合人员所在项目
		List<Project> zhang_p = new ArrayList<Project>();
		zhang_p.add(A);
		List<Project> wang_p = new ArrayList<Project>();
		wang_p.add(A);
		wang_p.add(B);
		List<Project> li_p = new ArrayList<Project>();
		li_p.add(B);
		// 修改数据库员工数据,将项目信息存入
		zhang.setEmpno(1);
		zhang.setPros(zhang_p);
		wang.setEmpno(2);
		wang.setPros(wang_p);
		li.setEmpno(3);
		li.setPros(li_p);
		
		// 将员工和员工项目信息重新存入数据库
		em.merge(zhang);
		em.merge(wang);
		em.merge(li);
		
		
		

		et.commit();
		em.close();
		emf.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值