類與類最直接的關係就是關聯關係
多對一,一對多:雙項
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();
}
}