如果我有一个如下事务,我的域对象使用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?
}
如果我不需要在任何一种情况下明确保存,我应该在哪里做?
答案 0 :(得分:1)
您需要将任何更改合并到现有实体,并保存新实体。
Session session = sessionFactory.getCurrentSession();
session.merge(domain);
session.save(domain2);
答案 1 :(得分:1)
如果域是新的,您将需要保存它,如果它是分离的,您将需要调用更新以将其重新连接到会话。 Hibernate只会检查附加到当前会话的实体。
对于domain2,您需要调用save以确保它是脏的。