保存习惯代码
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();//关闭session22 }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:删除和当前对象解除关系的附属对象。