欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

JPA多對多

系統 2171 0

JPA多對多

維護端注解

@ManyToMany (cascade?=?CascadeType.REFRESH)

@JoinTable (//關聯表

?????????????????? name?=? "student_teacher" , //關聯表名

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

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

被維護端注解

@ManyToMany(

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

?????????????????? mappedBy = "teachers",//通過維護端的屬性關聯

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

關系維護端刪除時,如果中間表存在些紀錄的關聯信息,則會刪除該關聯信息;

關系被維護端刪除時,如果中間表存在些紀錄的關聯信息,則會刪除失敗 .

?

?

以學生和老師的對應關系為例。一個學生可以擁有多個老師,一個老師也可以擁有多個學生。

學生實體類

Student.java代碼 復制代碼
  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);
	}

}

    

?重點在于:

Java代碼 復制代碼
  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;
	}


    

?老師實體類

Teacher.java代碼 復制代碼
  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;
	}
}

    

?重點在于:

Java代碼 復制代碼
  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注解的實體類為關系被維護端,另外的實體類為關系維護端的。顧名思意,關系的維護端對關系(在多對多為中間關聯表)的CRUD做操作。關系的被維護端沒有該操作,不能維護關系。

測試類

Java代碼 復制代碼
  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. ???????? //?關系被維護端刪除時,如果中間表存在些紀錄的關聯信息,則會刪除失敗 ??
  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. ???????? //?關系維護端刪除時,如果中間表存在些紀錄的關聯信息,則會刪除該關聯信息 ??
  73. ????????em.remove(em.getReference(Student. class ,? 1 )); ??
  74. ????????em.getTransaction().commit(); ??
  75. ????????emf.close(); ??
  76. ????} ??
  77. ???? ??
  78. }??

http://taoistwar.iteye.com

JPA多對多


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日操免费视频 | 国产亚洲精品精品国产亚洲综合 | 欧美日韩91 | 国产视频第一页 | 亚洲www啪成人一区二区麻豆 | 午夜视频你懂的 | 波多野结衣中文字幕视频 | 99热在线国产 | 免费的色网站 | 久久久国产这里有的是精品 | 久草精品视频 | 亚洲午夜免费视频 | 亚洲精品国产精品国自产在线 | 欧美国产中文 | 国产精品爱久久久久久久电影 | 国产99久久久国产精品 | 日韩中文欧美 | 日韩v在线 | 国产欧美日韩不卡一区二区三区 | 亚洲精品手机在线 | 欧美一级日韩 | 欧美精品人爱a欧美精品 | 九九九久久国产免费 | 欧美激情综合亚洲五月蜜桃 | 窝窝午夜精品一区二区 | 91精品国产综合久久青草 | 色综合色综合色综合色综合 | 亚洲欧美韩国日产综合在线 | 欧美成人精品第一区首页 | 欧美片网站免费 | 91短视频app下载 | 日韩在线操 | 国产手机精品一区二区 | 色综合久久天天综合网 | 欧美日韩在线视频观看 | 激情大乳女做爰办公室韩国 | 精品国产一区二区国模嫣然 | 日韩免费在线观看视频 | 欧美久操 | 青青草99 | 色拍拍欧美视频在线看 |