2011-10-14 52 views
0

如果我有一個交易如下​​,其中我的域對象映射爲Cascade.ALL使用Hibernate:我是否需要在spring事務中顯式保存修改的域對象?

@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? 
} 

如果我不需要在任何情況下顯式保存,在那裏我應該這樣做呢?

回答

1

您需要將任何更改合併到現有實體,並保存新的實體。

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

如果域名是新的,你需要保存它,如果它超脫,你需要調用更新它重新連接到會議。 Hibernate只會對連接到當前會話的實體進行髒檢查。

在domain2的情況下,您需要調用save以確保它被檢查爲髒。

相關問題