Hibernate反轉維護

2021-09-27 08:03:52 字數 2229 閱讀 1935

//反轉維護

@test

public void test4()

在部門表裡新增多個雇員列的時候會產生多一倍的語句:

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

hibernate: update emp set deptno=? where empno=?

hibernate: update emp set deptno=? where empno=?

hibernate: update emp set deptno=? where empno=?

首先先在表裡新增部門資訊,

直接再新增員工資訊

,因為此時還沒有部門表的情況

,所以在新增完員工資訊後再更新員工表裡的部門編號為

dept

裡的no值.

解決方法

此時可以設定dept

對映檔案裡的關係為反轉(為

true

就是由對方

(emp)

自動維護):

之後再執行後hibernate

產生的資料庫

sql語句:

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

hibernate: insert into emp (ename, job, mgr, hiredate, sal, comm, deptno, empno) values (?, ?, ?, ?, ?, ?, ?, ?)

此時的sql

語句只有

3條插入

,沒有更新

,但是得到的結果卻是:

empno   ename          hiredate            sal        deptno

23        16   sps3 2014/11/6 12:14:59 666.60

24        17   sps2 2014/11/6 12:14:59 666.60

25        18   sps1 2014/11/6 12:14:59 666.60

因為emp

的dept

屬性沒有賦值(沒有

deptno的值)

所以插入資料庫的時候沒有給deptno值.

解決方法為:

在給dept.getemps().add( )的時候直接給

new emp().setdept(dept),

dept.getemps().add(new emp("sps1", new timestamp(system.currenttimemillis()), 666.6).setdept(dept));

dept.getemps().add(new emp("sps2", new timestamp(system.currenttimemillis()), 666.6).setdept(dept));

dept.getemps().add(new emp("sps3", new timestamp(system.currenttimemillis()), 666.6).setdept(dept));

此時需要在建構函式裡給setdept

的時候返回 

emp;

public dept getdept() 

public emp setdept(dept dept) 

這樣就好了.

排序只需在dept

對映檔案裡加上(inverse="true")

Hibernate多表操作 級聯 外來鍵維護

一對多 乙個部門對應多個員工,乙個員工只能屬於乙個部門。乙個客戶對應多個聯絡人,乙個聯絡人只能屬於乙個客戶 一對多建表 在多的一方建立外來鍵。多對多 乙個學生可以選擇多門課程,一門課程可以被多個學生選擇。乙個使用者可以選擇多個角色,乙個角色可以被多個使用者選擇。多對多建表 建立中間表。中間表至少有兩...

mysql 主從維護 MYSQL主從的維護

分類 mysql postgresql 1.m上把事件從二進位制日誌中過濾 引數 binlog do db binlog ignore db 2.s上事件從中繼日誌中過濾 引數 replicate do db replicte do table repicate ingore db repliaca...

mysql表維護語句 Mysql維護語句

mysql的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可以使用show index語...