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