問題
Liferay DXP 7.2 Service Pack 1またはFix Pack 2をインストールした後、カスタマイズでLiferayサービスを使用してデータを更新または変更すると、StaleObjectStateExceptionが生成されます。
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.liferay.portal.model.impl.ContactImpl#8367818] at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:485) at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255) at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84) at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867) at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851) at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855) at com.liferay.portal.dao.orm.hibernate.SessionImpl.merge(SessionImpl.java:241) ... 208 more
解決策
StaleObjectStateExceptionは通常、競合する変更が検出された場合など、古いデータが検出されたときにHibernateによってスローされます。
変更の競合を引き起こすコーディングパターンを使用したカスタマイズでは、StaleObjectStateExceptionが発生する場合があります。StaleObjectStateExceptionを回避するには、これらのコードサンプルを使用してカスタマイズを更新してください。
追加情報
Liferay DXP 7.2 Service Pack 1またはFix Pack 2の時点で、追加のLiferayサービスでMVCCが有効になりました。
LiferayのMVCC実装は、 Hibernateの楽観的ロックシステムに 依存しています。このメカニズムを使用すると、Hibernateが競合として識別する変更が明らかになります。
例として、LiferayのBlogsEntryServiceを使用してブログエントリを更新すると、StaleObjectStateException:BlogsEntryUtil#updateEntryが発生する場合があります。
以下は、MVCCが有効になっている追加のLiferayサービスのリストです。
MVCCが有効な追加のLiferayサービス
| コンポーネント | サービス |
|
Account |
AccountEntry |
|
Asset |
AssetEntryUsage |
|
Asset Auto Tagger |
AssetAutoTaggerEntry |
|
Asset Category Property |
AssetCategoryProperty |
|
Asset Display Page |
AssetDisplayPageEntry |
|
Asset Entry Rel |
AssetEntryAssetCategoryRel |
|
Asset List |
AssetListEntry |
|
Blogs |
BlogsEntry |
|
Bookmarks |
BookmarksEntry |
|
Calendar |
Calendar |
|
Document Library Content |
DLContent |
|
Dynamic Data Mapping |
DDMContent |
|
Fragment |
FragmentCollection |
|
Journal |
JournalArticle |
|
Knowledge Base |
KBArticle |
|
Layout Page Template |
LayoutPageTemplateCollection |
|
Mobile Device Rules |
MDRAction |
|
Segments |
SegmentsEntry |
|
Site |
SiteFriendlyURL |
|
Site Navigation |
SiteNavigationMenu |
|
Trash |
TrashEntry |
|
Wiki |
WikiNode |