亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JPA多對(duì)多

系統(tǒng) 2095 0

JPA多對(duì)多

維護(hù)端注解

@ManyToMany (cascade?=?CascadeType.REFRESH)

@JoinTable (//關(guān)聯(lián)表

?????????????????? name?=? "student_teacher" , //關(guān)聯(lián)表名

?????????????????? inverseJoinColumns?=? @JoinColumn (name?=? "teacher_id" ),//被維護(hù)端外鍵

?????????????????? joinColumns?=? @JoinColumn (name?=? "student_id" ))//維護(hù)端外鍵

被維護(hù)端注解

@ManyToMany(

?????????????????? cascade = CascadeType.REFRESH,

?????????????????? mappedBy = "teachers",//通過維護(hù)端的屬性關(guān)聯(lián)

?????????????????? fetch = FetchType.LAZY)

關(guān)系維護(hù)端刪除時(shí),如果中間表存在些紀(jì)錄的關(guān)聯(lián)信息,則會(huì)刪除該關(guān)聯(lián)信息;

關(guān)系被維護(hù)端刪除時(shí),如果中間表存在些紀(jì)錄的關(guān)聯(lián)信息,則會(huì)刪除失敗 .

?

?

以學(xué)生和老師的對(duì)應(yīng)關(guān)系為例。一個(gè)學(xué)生可以擁有多個(gè)老師,一個(gè)老師也可以擁有多個(gè)學(xué)生。

學(xué)生實(shí)體類

Student.java代碼 復(fù)制代碼
  1. package?com.taoistwar.jpa.entity.manytomany; ??
  2. ??
  3. import?java.util.HashSet; ??
  4. import?java.util.Set; ??
  5. ??
  6. import?javax.persistence.CascadeType; ??
  7. import?javax.persistence.Column; ??
  8. import?javax.persistence.Entity; ??
  9. import?javax.persistence.GeneratedValue; ??
  10. import?javax.persistence.GenerationType; ??
  11. import?javax.persistence.Id; ??
  12. import?javax.persistence.JoinColumn; ??
  13. import?javax.persistence.JoinTable; ??
  14. import?javax.persistence.ManyToMany; ??
  15. ??
  16. @Entity ??
  17. public?class?Student?{ ??
  18. ????private?Integer?id; ??
  19. ????private?String?name; ??
  20. ????private?Set<Teacher>?teachers?=?new?HashSet<Teacher>(); ??
  21. ??
  22. ????@Id ??
  23. ????@GeneratedValue(strategy?=?GenerationType.AUTO) ??
  24. ????public?Integer?getId()?{ ??
  25. ????????return?id; ??
  26. ????} ??
  27. ??
  28. ????public?void?setId(Integer?id)?{ ??
  29. ????????this.id?=?id; ??
  30. ????} ??
  31. ??
  32. ????@Column(nullable?=?false,?length?=? 16 ) ??
  33. ????public?String?getName()?{ ??
  34. ????????return?name; ??
  35. ????} ??
  36. ??
  37. ????public?void?setName(String?name)?{ ??
  38. ????????this.name?=?name; ??
  39. ????} ??
  40. ??
  41. ????@ManyToMany(cascade?=?CascadeType.REFRESH) ??
  42. ????@JoinTable(name?=? "student_teacher" ,?inverseJoinColumns?=?@JoinColumn(name?=? "teacher_id" ),?joinColumns?=?@JoinColumn(name?=? "student_id" )) ??
  43. ????public?Set<Teacher>?getTeachers()?{ ??
  44. ????????return?teachers; ??
  45. ????} ??
  46. ??
  47. ????public?void?setTeachers(Set<Teacher>?teachers)?{ ??
  48. ????????this.teachers?=?teachers; ??
  49. ????} ??
  50. ??
  51. ????public?void?addTeacher(Teacher?teacher)?{ ??
  52. ????????this.teachers.add(teacher); ??
  53. ????} ??
  54. ??
  55. ????public?void?removeTeachers(Teacher?teacher)?{ ??
  56. ????????this.teachers.remove(teacher); ??
  57. ????} ??
  58. ??
  59. }??
      package com.taoistwar.jpa.entity.manytomany;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Student {
	private Integer id;
	private String name;
	private Set<Teacher> teachers = new HashSet<Teacher>();

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(nullable = false, length = 16)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@ManyToMany(cascade = CascadeType.REFRESH)
	@JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "teacher_id"), joinColumns = @JoinColumn(name = "student_id"))
	public Set<Teacher> getTeachers() {
		return teachers;
	}

	public void setTeachers(Set<Teacher> teachers) {
		this.teachers = teachers;
	}

	public void addTeacher(Teacher teacher) {
		this.teachers.add(teacher);
	}

	public void removeTeachers(Teacher teacher) {
		this.teachers.remove(teacher);
	}

}

    

?重點(diǎn)在于:

Java代碼 復(fù)制代碼
  1. @ManyToMany (cascade?=?CascadeType.REFRESH) ??
  2. ???? @JoinTable (name?=? "student_teacher" ,?inverseJoinColumns?=? @JoinColumn (name?=? "teacher_id" ),?joinColumns?=? @JoinColumn (name?=? "student_id" )) ??
  3. ???? public ?Set<Teacher>?getTeachers()?{ ??
  4. ???????? return ?teachers; ??
  5. ????}??
      @ManyToMany(cascade = CascadeType.REFRESH)
	@JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "teacher_id"), joinColumns = @JoinColumn(name = "student_id"))
	public Set<Teacher> getTeachers() {
		return teachers;
	}


    

?老師實(shí)體類

Teacher.java代碼 復(fù)制代碼
  1. package?com.taoistwar.jpa.entity.manytomany; ??
  2. ??
  3. import?java.util.HashSet; ??
  4. import?java.util.Set; ??
  5. ??
  6. import?javax.persistence.CascadeType; ??
  7. import?javax.persistence.Column; ??
  8. import?javax.persistence.Entity; ??
  9. import?javax.persistence.FetchType; ??
  10. import?javax.persistence.GeneratedValue; ??
  11. import?javax.persistence.GenerationType; ??
  12. import?javax.persistence.Id; ??
  13. import?javax.persistence.ManyToMany; ??
  14. ??
  15. @Entity ??
  16. public?class?Teacher?{ ??
  17. ????private?Integer?id; ??
  18. ????private?String?name; ??
  19. ????private?Set<Student>?students?=?new?HashSet<Student>(); ??
  20. ??
  21. ????@Id ??
  22. ????@GeneratedValue(strategy?=?GenerationType.AUTO) ??
  23. ????public?Integer?getId()?{ ??
  24. ????????return?id; ??
  25. ????} ??
  26. ??
  27. ????public?void?setId(Integer?id)?{ ??
  28. ????????this.id?=?id; ??
  29. ????} ??
  30. ??
  31. ????@Column(nullable?=?false,?length?=? 16 ) ??
  32. ????public?String?getName()?{ ??
  33. ????????return?name; ??
  34. ????} ??
  35. ??
  36. ????public?void?setName(String?name)?{ ??
  37. ????????this.name?=?name; ??
  38. ????} ??
  39. ??
  40. ????@ManyToMany(cascade?=?CascadeType.REFRESH,?mappedBy?=? "teachers" ,?fetch?=?FetchType.LAZY) ??
  41. ????public?Set<Student>?getStudents()?{ ??
  42. ????????return?students; ??
  43. ????} ??
  44. ??
  45. ????public?void?setStudents(Set<Student>?students)?{ ??
  46. ????????this.students?=?students; ??
  47. ????} ??
  48. ??
  49. ??????@Override ??
  50. ????public?int?hashCode()?{ ??
  51. ????????final?int?prime?=? 31 ; ??
  52. ????????int?result?=? 1 ; ??
  53. ????????result?=?prime?*?result?+?((id?==?null)??? 0 ?:?id.hashCode()); ??
  54. ????????return?result; ??
  55. ????} ??
  56. ??
  57. ????@Override ??
  58. ????public?boolean?equals(Object?obj)?{ ??
  59. ????????if?(this?==?obj) ??
  60. ????????????return?true; ??
  61. ????????if?(obj?==?null) ??
  62. ????????????return?false; ??
  63. ????????if?(getClass()?!=?obj.getClass()) ??
  64. ????????????return?false; ??
  65. ????????Teacher?other?=?(Teacher)?obj; ??
  66. ????????if?(id?==?null)?{ ??
  67. ????????????if?(other.id?!=?null) ??
  68. ????????????????return?false; ??
  69. ????????}?else?if?(!id.equals(other.id)) ??
  70. ????????????return?false; ??
  71. ????????return?true; ??
  72. ????} ??
  73. }??
      package com.taoistwar.jpa.entity.manytomany;

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.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Teacher {
	private Integer id;
	private String name;
	private Set<Student> students = new HashSet<Student>();

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(nullable = false, length = 16)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@ManyToMany(cascade = CascadeType.REFRESH, mappedBy = "teachers", fetch = FetchType.LAZY)
	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}

      @Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Teacher other = (Teacher) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
}

    

?重點(diǎn)在于:

Java代碼 復(fù)制代碼
  1. @ManyToMany (cascade?=?CascadeType.REFRESH,?mappedBy?=? "teachers" ,?fetch?=?FetchType.LAZY) ??
  2. ???? public ?Set<Student>?getStudents()?{ ??
  3. ???????? return ?students; ??
  4. ????}??
      @ManyToMany(cascade = CascadeType.REFRESH, mappedBy = "teachers", fetch = FetchType.LAZY)
	public Set<Student> getStudents() {
		return students;
	}
    

?擁有mappedBy注解的實(shí)體類為關(guān)系被維護(hù)端,另外的實(shí)體類為關(guān)系維護(hù)端的。顧名思意,關(guān)系的維護(hù)端對(duì)關(guān)系(在多對(duì)多為中間關(guān)聯(lián)表)的CRUD做操作。關(guān)系的被維護(hù)端沒有該操作,不能維護(hù)關(guān)系。

測(cè)試類

Java代碼 復(fù)制代碼
  1. package ?com.taoistwar.jpa.entity.manytomany; ??
  2. ??
  3. import ?javax.persistence.EntityManager; ??
  4. import ?javax.persistence.EntityManagerFactory; ??
  5. import ?javax.persistence.Persistence; ??
  6. ??
  7. import ?org.junit.Test; ??
  8. ??
  9. public ? class ?ManyToMany?{ ??
  10. ???? @Test ??
  11. ???? public ? void ?save()?{ ??
  12. ????????EntityManagerFactory?emf?=?Persistence ??
  13. ????????????????.createEntityManagerFactory( "JPAPU" ); ??
  14. ????????EntityManager?em?=?emf.createEntityManager(); ??
  15. ????????em.getTransaction().begin(); ??
  16. ????????Student?student?=? new ?Student(); ??
  17. ????????student.setName( "小李" ); ??
  18. ????????Teacher?teacher?=? new ?Teacher(); ??
  19. ????????teacher.setName( "大李" ); ??
  20. ????????em.persist(student); ??
  21. ????????em.persist(teacher); ??
  22. ????????em.getTransaction().commit(); ??
  23. ????????emf.close(); ??
  24. ????} ??
  25. ???? ??
  26. ???? @Test ??
  27. ???? public ? void ?bind()?{ ??
  28. ????????EntityManagerFactory?emf?=?Persistence ??
  29. ????????????????.createEntityManagerFactory( "JPAPU" ); ??
  30. ????????EntityManager?em?=?emf.createEntityManager(); ??
  31. ????????em.getTransaction().begin(); ??
  32. ????????Student?student?=?em.find(Student. class ,? 1 ); ??
  33. ????????Teacher?teacher?=?em.find(Teacher. class ,? 1 ); ??
  34. ????????student.addTeacher(teacher); ??
  35. ????????em.persist(student); ??
  36. ????????em.getTransaction().commit(); ??
  37. ????????emf.close(); ??
  38. ????} ??
  39. ???? ??
  40. ???? @Test ??
  41. ???? public ? void ?unbind()?{ ??
  42. ????????EntityManagerFactory?emf?=?Persistence ??
  43. ????????????????.createEntityManagerFactory( "JPAPU" ); ??
  44. ????????EntityManager?em?=?emf.createEntityManager(); ??
  45. ????????em.getTransaction().begin(); ??
  46. ????????Student?student?=?em.find(Student. class ,? 1 ); ??
  47. ????????Teacher?teacher?=?em.find(Teacher. class ,? 1 ); ??
  48. ????????student.removeTeachers(teacher); ??
  49. ????????em.persist(student); ??
  50. ????????em.getTransaction().commit(); ??
  51. ????????emf.close(); ??
  52. ????} ??
  53. ???? ??
  54. ???? @Test ??
  55. ???? public ? void ?removeTeacher()?{ ??
  56. ????????EntityManagerFactory?emf?=?Persistence ??
  57. ????????????????.createEntityManagerFactory( "JPAPU" ); ??
  58. ????????EntityManager?em?=?emf.createEntityManager(); ??
  59. ????????em.getTransaction().begin(); ??
  60. ???????? //?關(guān)系被維護(hù)端刪除時(shí),如果中間表存在些紀(jì)錄的關(guān)聯(lián)信息,則會(huì)刪除失敗 ??
  61. ????????em.remove(em.getReference(Teacher. class ,? 1 )); ??
  62. ????????em.getTransaction().commit(); ??
  63. ????????emf.close(); ??
  64. ????} ??
  65. ???? ??
  66. ???? @Test ??
  67. ???? public ? void ?removeStudent()?{ ??
  68. ????????EntityManagerFactory?emf?=?Persistence ??
  69. ????????????????.createEntityManagerFactory( "JPAPU" ); ??
  70. ????????EntityManager?em?=?emf.createEntityManager(); ??
  71. ????????em.getTransaction().begin(); ??
  72. ???????? //?關(guān)系維護(hù)端刪除時(shí),如果中間表存在些紀(jì)錄的關(guān)聯(lián)信息,則會(huì)刪除該關(guān)聯(lián)信息 ??
  73. ????????em.remove(em.getReference(Student. class ,? 1 )); ??
  74. ????????em.getTransaction().commit(); ??
  75. ????????emf.close(); ??
  76. ????} ??
  77. ???? ??
  78. }??

轉(zhuǎn) http://taoistwar.iteye.com

JPA多對(duì)多


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 牛牛影视ac精品视频 | 久久是免费只精品热在线 | 国产精品麻豆 | 日本欧美一区二区三区在线 | xxxxyoujizz护士 | 视频国产免费 | 午夜在线观看cao | 中文字幕一区精品 | 国产精品ⅴ视频免费观看 | 小明看看成人免费 | 99视频在线精品免费观看18 | 久久精品国产999久久久 | 五月天狠狠干 | 天天插夜夜操 | 天天综合射 | 亚洲第一永久在线观看 | 色婷婷久久综合中文网站 | 久久青草免费91观看 | 亚洲网站在线看 | 亚洲精品综合 | 国产产一区二区三区久久毛片国语 | 久久影院朴妮唛 | 国内精品久久久久久久久久影视 | 青青草国产免费一区二区 | 国产高清看片日韩欧美久久 | 在线私人影院 | 美女视频黄a视频免费全过程在线 | 天天草天天干天天 | 久久久精品一区二区三区 | 日本视频中文字幕一区二区 | 亚洲欧美日韩综合精品网 | 四虎影视在线观看2413 | 一二三区无线码2021 | 国产探花视频在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 亚洲人成毛片线播放 | 黄 色 免费网 站 成 人 | 久草视频福利在线观看 | 国产偷国产偷亚洲高清在线 | 日日操天天操夜夜操 | 久久久中文字幕 |