欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 一级毛片丰满 出奶水 | 在线视频三级 | 锵锵锵锵锵锵锵锵锵好湿好大 | 色天天天天综合男人的天堂 | 日韩精品一区二区三区中文字幕 | 亚洲国产精品成 | 无名者电影在线完整版免费 | 久久九九99热这里只有精品 | 国产精品视频免费观看 | 成人片黄网站A片免费 | 亚洲欧美日韩综合在线 | 亚洲国产欧美久久香综合 | 日韩网新片免费 | 中文字幕亚洲欧美日韩在线不卡 | 国产色网 | 日韩h片在线观看 | 亚洲综合色一区二区三区另类 | 亚洲第一人伊人色综合 | 日本无卡码免费一区二区三区 | 日韩精品一区二区三区四区视频 | 欧美顶级xxxxbbbb | 午夜看片免费 | 久久亚洲国产精品无码一区 | 欧美日韩国产在线观看 | 国产一区二区久久 | 羞羞电影在线观看 | 一级片一级片一级片一级片 | 亚洲国产路线1路线2路线 | 欧美成人精品二区三区99精品 | 欧美一级网址 | 色播基地| 免费在线观看成人 | 奇米影视小说 | 91久久青青草原免费 | 美女午夜影院 | 国产成人久久婷婷精品流白浆 | 四虎884aa永久播放地址http | 刮伦人妇A片1级 | 亚洲综合久久久久久中文字幕 | 荷兰欧美一级毛片 | 免费一级做a爰片性视频 |