2017-06-20 26 views
0

我需要在Java服務中創建一個包含21/12/2012修改日期的期刊文章。這裏是addArticle的JavaDoc中:Liferay setModifiedDate不影響數據庫的修改日期

* @param serviceContext the service context to be applied. Can set the 
*   [...], modification date, [...] 
*   for the web content article. 

這裏是我的嘗試:

Date date = new SimpleDateFormat("dd/MM/yyyy").parse("21/12/2012"); 
serviceContext.setModifiedDate(date); 

// Add article. 
JournalArticleLocalServiceUtil.addArticle(
    userId, groupId, folderId, titleMap, descriptionMap, 
    xmlContent, structureKey, templateKey, serviceContext); 

問題:在數據庫中,創建JournalArticle行的modifiedDate是今天的日期。

我做錯了什麼?
也許addArticle調用被認爲是最後一次修改?如何解決這個問題?

+0

因爲這是一個非常詳細的問題,你可能想看看執行情況https://github.com/liferay/com-liferay-journal/blob/master/journal-service/src/main/java /com/liferay/journal/service/impl/JournalArticleLocalServiceImpl.java –

回答

2

您可以通過下面的代碼實現的是:

JournalArticle journalArticle = 
    JournalArticleUtil.create(CounterLocalServiceUtil.increment()); 
Date now = new Date(); 
Date modifiedDate = new SimpleDateFormat("dd/MM/yyyy").parse("21/12/2012"); 

journalArticle.setUserId(userId); 
journalArticle.setGroupId(groupId); 
journalArticle.setFolderId(folderId); 
journalArticle.setTitleMap(titleMap); 
journalArticle.setDescriptionMap(descriptionMap); 
journalArticle.setContent(xmlContent); 
journalArticle.setStructureId(structureKey); 
journalArticle.setTemplateId(templateKey); 
journalArticle.setCreateDate(now); 
journalArticle.setModifiedDate(modifiedDate); 

JournalArticle updatedJournalArticle = JournalArticleUtil.update(journalArticle); 

理解:
將返回JournalArticle類的新對象。
2.根據您的要求設置屬性(重點:setModifiedDate)。
3.通過傳遞該填充的對象將其存儲在數據庫中來調用JournalArticleUtil.update

2

試試這個:

Date date = new SimpleDateFormat("dd/MM/yyyy").parse("21/12/2012"); 

// Add article. 
JournalArticle article = JournalArticleLocalServiceUtil.addArticle(
    userId, groupId, folderId, titleMap, descriptionMap, 
    xmlContent, structureKey, templateKey, serviceContext); 

article.setModifiedDate(date); 

JournalArticleLocalServiceUtil.updateJournalArticle(article); 

另一種方式:

可以使用JournalArticleLocalServiceUtil.addJournalArticle(journalArticle)方法,但是你必須手動創建journalArticle對象:

long primaryKey = CounterLocalServiceUtil.increment(JournalArticle.class.getName()); 
JournalArticle journalArticle = JournalArticleLocalServiceUtil.createJournalArticle(primaryKey); 

//Set all the journal properties you need... 
journalArticle.setGroupId(yourGroupId); 
journalArticle.setUserId(yourUserId); 
journalArticle.setStructureId(ddmStructureKey); 
journalArticle.setTemplateId(ddmTemplateKey); 
... 

JournalArticleLocalServiceUtil.addJournalArticle(journalArticle); 

這涉及到Liferay 7 API,但它也可以在6.2上運行。

+0

由於性能原因(遷移大量內容),我真的更喜歡第二次Liferay /數據庫調用。但如果沒有其他解決方案,我會使用這個,謝謝! –

+0

我編輯了答案,現在檢查它是否更好。順便說一句,還有兩個電話給DB :( –

+0

小調:在第二個代碼清單中,還可以添加'setModifiedDate'調用嗎?它是微不足道的,但它是問題的關鍵,所以最好讓它100%清除^ _^ –