1. 程式人生 > >Hibernate關聯關係配置-----基於連線表的雙向多對多配置

Hibernate關聯關係配置-----基於連線表的雙向多對多配置

實體:

package bi.many2many.jointable;

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

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

	public Student() {

	}

	public Student(int id, String name, Set<Teacher> teachers) {
		super();
		this.id = id;
		this.name = name;
		this.teachers = teachers;
	}

	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public Set<Teacher> getTeachers() {
		return teachers;
	}

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

}

package bi.many2many.jointable;

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

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

	public Teacher() {

	}

	public Teacher(int id, String name, Set<Student> students) {
		super();
		this.id = id;
		this.name = name;
		this.students = students;
	}

	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public Set<Student> getStudents() {
		return students;
	}

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

}

hbm對映檔案:
<hibernate-mapping>
	<class name="bi.many2many.jointable.Student">
		<id name="id" column="sid">
			<generator class="native" />
		</id>
		<property name="name" type="string" column="name"></property>
		
		<set name="teachers" table="studentteacher">
			<key column="sid"></key>
			<many-to-many class="bi.many2many.jointable.Teacher" column="tid"></many-to-many>
		</set>
	</class>

</hibernate-mapping>

<hibernate-mapping>
	<class name="bi.many2many.jointable.Teacher">
		<id name="id" column="tid">
			<generator class="native" />
		</id>
		<property name="name" type="string" column="name"></property>
		
		<set name="students" table="studentteacher" inverse="true">
			<key column="tid"></key>
			<many-to-many class="bi.many2many.jointable.Student" column="sid"></many-to-many>
		</set>
	</class>

</hibernate-mapping>

測試檔案:
public class Test {
	@org.junit.Test
	public void testAdd() {
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		Teacher t1 = new Teacher();
		t1.setName("李剛");
		
		Teacher t2 = new Teacher();
		t2.setName("張孝祥");
		
		Teacher t3 = new Teacher();
		t3.setName("馬士兵");
		
		Student s1 = new Student();
		s1.setName("張三");
		s1.getTeachers().add(t1);
		s1.getTeachers().add(t2);
		s1.getTeachers().add(t3);
		
		Student s2 = new Student();
		s2.setName("李四");
		s2.getTeachers().add(t3);
		s2.getTeachers().add(t2);
			
		session.save(t1);
		session.save(t2);
		session.save(t3);
		session.save(s1);
		session.save(s2);
		session.beginTransaction().commit();
	}
}

測試結果:
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)


相關推薦

Hibernate關聯關係對映-----基於連線的單向一對對映

實體:package uni.many2one.jointable; public class Parent { private int id; private String name; private Child child; public Parent() {

Hibernate關聯關係對映-----基於連線的單向對映配置

實體:package uni.many2many.jointable; import java.util.HashSet; import java.util.Set; public class Student { private int id; private Str

Hibernate關聯關係對映-----基於連線的單向一對一對映

實體:package uni.one2one.jointable; public class Husband { private int id; private String name; private Wife wife; public Husband() {

Hibernate關聯關係配置-----基於連線雙向配置

實體:package bi.many2many.jointable; import java.util.HashSet; import java.util.Set; public class Student { private int id; private Stri

Hibernate關聯關係配置-----基於連線雙向一對一對映配置

實體:package bi.one2one.jointable; public class Husband { private int id; private String name; private Wife wife; public Husband() {

Hibernate中用left join(左外連線)查詢對映中沒有關聯關係的兩個記錄問題

public class SplitSummary extends PubBean { // 結算賬單開始日期 private String startDate = ""; // 結算賬單結束日期 private String endDate = ""; // 店鋪編號 private Strin

Hibernate學習筆記(五) --- 創建基於中間關聯映射關系

mys 兩個 override pac tid 一對多 main ber different 多對多映射是在實際數據庫表關系之間比較常見的一種,仍然以電影為例,一部電影可以有多個演員,一個演員也可以參演多部電影,電影表和演員表之間就是“多對多”的關系 針對多對多的映射關系,

Hibernate關係對映的一單向關聯雙向關聯、一對一主鍵關聯、一對一外來鍵關聯關係關聯

2018-11-10  22:27:02開始寫   下圖內容ORM、Hibernate介紹、hibername.cfg.xml結構:     下圖內容hibernate對映檔案結構介紹   下圖內容hibernate

hibernate關聯關係雙向OneToOne

     其實關聯關係看起來很簡單,就什麼一對一,一對多,多對多,但是深入發掘,你會知道其中它們之間的關係其實還是挺複雜的,所以今天先用個小例子講講雙向一對一吧~ 這裡我使用的是eclipse編寫的一個maven+hibernate的一個例子 首先

hibernate 關聯關係配置(一對一)

Hibernate 關聯關係:        1. 什麼是關聯(association)            1.1 關聯指的是類之間的引用關係。如果類A與類B關聯,那麼被引用的類B將被定義為類

Hibernate 關聯關係對映配置

Hibernate 關聯關係對映配置 問題背景 一個部門下有多個員工,每個員工只屬於一個部門 員工對部門(多對一) 部門對員工(一對多) 配置關聯關係 實體類 Employee.java publ

Hibernate關聯關係註解配置簡單理解

Hibernate關聯關係註解配置 什麼是關聯關係?關聯關係有哪幾種? 關聯關係指實體之間的關係,也就是表與表之間的關係。一個關係用兩個屬性來描述,數量性和方向性。 從數量上來看,表與表之間主要有三種關係,一對一,一對多,多對多。 加上關係的方向,還有一個多對一。 hibernate中關聯關係的維護

Hibernate基於主鍵的單項,雙向對映關係

今天我們來一起談論下hibernate的基於主鍵的單項,雙向多對多對映關係 首先多對多都是基於主鍵的,沒有基於外來鍵的說法 1.基於主鍵的單項多對多 在這裡就是說中間stuobject是一張關係表,將兩張表的主鍵進行關聯,形成了多對多的關係 程式碼如

Hibernate關聯關係對映-----單向一對一對映配置

     這裡舉了一夫一妻的例子。實體:package uni.one2one; public class Husband { private int id; private String name; private Wife wife; public Husba

web開發(十一)之Hibernate關聯關係配置

寫在前面 Hibernate中關係的對映共有以下四種:一對多、多對一、一對一、多對多這四種。 一對多單向關聯 xml對映 一對多即在A表中的每一條資料都會與B表中的n條有關聯;在這種情況下一般都是在B表新增一個欄位用來當作外來鍵與A表中的主鍵相關聯。而這種

Hibernate關聯關係配置(一對一,一對,)

第一種關聯關係:一對多(多對一) "一對多"是最普遍的對映關係,簡單來講就如消費者與訂單的關係。 一對多:從消費者角的度來說一個消費者可以有多個訂單,即為一對多。 多對一:從訂單的角度來說多個

hibernate的映射之四(雙向關聯)

als oot bean odi 生成 指定 數據庫方言 映射文件 格式化sql Many-to-Many 多對多的映射可以使用一組Java集合不包含任何重復的元素來實現。我們已經看到了Hibernate如何設置映射集合。 集(SET)被映射到與映射表中<set&g

hibernate雙向關系映射的級聯配置

hibernate多對多雙向關系映級配置多對多關系映射 set元素的屬性:cascade:級聯操作。取值:save-update:級聯保存更新delete:級聯刪除。 註意:在多對多雙向關系映射中,不能配置雙向級聯刪除。但是可以配置雙向級聯保存更新。 <set name=&q

Hibernate_day03---關係建立、一對配置及操作、配置及操作

一、表與表關係建立思路 一對多關係 關係舉例: (1)分類和商品關係。 一個分類裡面有多個商品,一個商品只能屬於一個分類 (2)公司和員工關係 一個公司有多個員工,每個員工屬於一個公司 一對多建表:通過外來鍵建立關係 圖示: 多對多關係 關係舉例

Hibernate(三)】Hibernate操作、配置

1.2 Hibernate的一對多關聯對映 1.2.1 資料庫表與表之間的關係 1.2.1.1 一對多關係 什麼樣關係屬於一對多?   一個部門對應多個員工,一個員工只能屬於某一個部門。 一個客戶對應多個聯絡人,一個聯絡人只能屬於某一個客戶。 一對多的建表原