我是否需要在spring事务中显式保存修改后的域对象?

时间:2011-10-14 09:44:43

标签: java hibernate spring transactions

如果我有一个如下事务,我的域对象使用Hibernate映射为Cascade.ALL:

@Transactional
public void transactionAllMethod(Domain domain) {
     domain.addItemToCollection(new Item);
     //Do I need to call domain.saveOrUpdate() here, or will changes to the domain be flushed
     //automatically at the end of the transaction with FLUSHMODE.AUTO?

     Domain domain2 = new Domain();
     //set some fields here

     //Do I need to save my second domain as it is new, or again will things be
     //automatically persisted during dirtychecking at the end of the transaction?
}

如果我不需要在任何一种情况下明确保存,我应该在哪里做?

2 个答案:

答案 0 :(得分:1)

您需要将任何更改合并到现有实体,并保存新实体。

Session session = sessionFactory.getCurrentSession();
session.merge(domain);
session.save(domain2);

答案 1 :(得分:1)

如果域是新的,您将需要保存它,如果它是分离的,您将需要调用更新以将其重新连接到会话。 Hibernate只会检查附加到当前会话的实体。

对于domain2,您需要调用save以确保它是脏的。