2012-11-26 27 views
1

我正在研究用戶可以將消息發送給多個人的需求,我必須將這些消息保存在消息表中。
我正在使用JPA entityManager持久化對象和Hibernate作爲持久性提供者和Spring聲明式事務管理。Spring Hibernate JPA不在同一個表中保存多行

即使我正在執行persist()方法三次,它只保存表中的一行。我不知道我應該怎麼做才能保存所有的信息。它不顯示任何異常消息。

以下是在applicationContext.xml中

<tx:advice id="txAdvice" > 

    <tx:attributes> 

     <tx:method 
      name="*" 
      propagation="REQUIRED" /> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 

    <aop:pointcut 
     id="messageServiceOperation" 
     expression="execution(* com.abhinow.message.services.*.*(..))" /> 

    <aop:advisor 
     advice-ref="txAdvice" 
     pointcut-ref="messageServiceOperation" /> 
</aop:config> 

我的聲明式事務管理配置以下是我在服務類MessageService.java

private void saveMultipleMessages(SentMessage message) { 
    String[] toAddresses = message.getMultipleDestinations().split(","); 
    for(String to: toAddresses) { 
     message.setTo(to); 
    saveMessage(message); 
    } 
} 

public void saveMessage(SentMessage message) { 
    messageRepository.saveSentMessage(message); 
} 

下面的代碼是代碼在我MessageRepository.java

@Repository 
    public class MessageRepository { 

    @PersistenceContext 
    EntityManager entityManagerFactory; 

    public void saveSentMessage(SentMessage message) { 

    entityManagerFactory.persist(message); 

    } 
     } 

任何幫助,將不勝感激。在此先感謝

回答

1

它看起來像你在for循環中重複使用相同的SentMessage對象。我的猜測是JPA會檢測到它已經持久保存了這個對象,並且不會再堅持它。

嘗試是這樣的:

private void saveMultipleMessages(SentMessage message) { 
    String[] toAddresses = message.getMultipleDestinations().split(","); 
    for(String to: toAddresses) { 
     SentMessage toSave = message.withToAddress(to); 
     saveMessage(toSave); 
    } 
} 

其中「withToAddress」創建基於當前一個新的SentMessage對象,但有不同的解決。當你使用這種技術時,你可以使SentMessage不可變,這通常比可變對象有優勢。

+0

非常感謝。有效。 –

相關問題