EclipseLink で、EntityManager#remove() を実行したところ、 以下のエラーが発生しました。
Entity must be managed to call remove: Entity[ id=601 ], try merging the detached and try the remove again.
対処方法を記載します。
前提
使用している EclipseLink の Version、 RDB は以下になります。
- EclipseLink
<!-- Eclipse Link -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.3</version>
</dependency>
- postgress
psql --version
---------------------------
psql (PostgreSQL) 9.5.2
---------------------------
参考
原因と対処
EntityManager で Manage な状態の Entity しか削除できないようです。
remove() を実行する前に、Manage な 状態にするため、
EntityManager#merge()
を実行します。
/**
* remove
*
* @param entity
* @return
*/
public T remove(T entity) {
try {
if (!em.contains(entity)) {
entity = em.merge(entity);
}
em.remove(entity);
} catch (ConstraintViolationException ex) {
ConstraintViolationUtils.writeLogAndThrow(ex);
}
return entity;
}
Detach と、Merge 、Remove の違いが未だあまり理解できておりません。
以上です。
コメント