儲存習慣程式碼
1 @Test 2 public void saveTwoTableTest(){ 3 Transaction transaction = null; 4 try { 5 transaction = session.beginTransaction();//建立session 6 Customer customer=new Customer(); 7 customer.setCustomerName("123"); 8 //在Customer中設定了一對多關係 9 Order order=new Order(); 10 order.setOrderNumber("100"); 11 customer.getOrders().add(order); 12 session.save(customer);//儲存操作 13 transaction.commit();//提交事務 14 } catch (HibernateException e) { 15 if (transaction!=null) { 16 transaction.rollback();//事務回滾 17 } 18 e.printStackTrace(); 19 }finally{ 20 if (session!=null&&session.isOpen()) { 21 session.close();//關閉session 22 } 23 } 24 }
在這個儲存中需要注意的事項:
1.如果按照這個儲存的步驟的話:
需要在
<set name="orders" cascade="all-delete-orphan">
在set集合中加上級聯操作
不然會出現如下報錯:
object references an unsaved transient instance - save the transient instance before flushing: cn.lonecloud.domain.Order
下面是級聯屬性的屬性值:
Cascade 屬性值:
none:在儲存、刪除修改物件的時候,不考慮其附屬物的操作
save-update:在儲存、更新當前物件時,級聯儲存、更新附屬物。
delete:在刪除當前物件時,級聯刪除附屬物。
all: 包含save-update和delete的操作 當在一對多關係的時候remove一個物件的時候,那麼他將會更新附屬物的屬性,並不會刪除附屬物
delete-orphan:刪除和當前物件解除關係的附屬物件。