여기에 아주 이상한 상황이 있습니다. 엔티티 집합을 삭제하려고하면 즉시 같은 요소가있을 수도 있고 없을 수도있는 엔티티 집합을 추가하려고하면 아래 예외가 발생하는 것 같습니다. 그다지 말하지 않기 때문에 전체 스택 추적은 필요하지 않습니다.JPA/Hibernate EntityNotFoundException 해결
javax.persistence.EntityNotFoundException: deleted entity passed to persist [com.test.MyEntity#<null>]
좀 더 명확하게하기 위해 좀 더 자세한 설명을하겠습니다.
이것은 내 단체입니다.
@Entity
@Table(name = "MY_ENTITY")
@SequenceGenerator(name = "my_enty_seq", sequenceName = "MY_ENTITY_SEQ")
public class MyEntity {
private long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_enty_seq")
@Column(name = "ID", unique = true, nullable = false, precision = 12, scale = 0)
public long getId() {
return this.id;
}
// Other methods & variables which are not relevant here.
}
그리고 이것은 엔티티와 함께 연주하는 클래스입니다.
public class MyEntityServiceImpl implements MyEntityService {
public void updateMyEntities(List<MyEntity> newEntities) {
// Delete the Old Items
List<MyEntity> oldEntities = myDAO.getAllEntities();
myDAO.delete(oldEntities); // myDAO extends GenericDaoJpaWithoutJpaTemplate, hence, the DELETE is available in it.
// Add the New Items
myDAO.store(newEntities); // This is where I get the mentioned Exception.
}
// Other non-relevant stuffs
}
나는 store()
방법에 언급 된 예외를 얻는의 시나리오 oldEntities 및 newEntities 목록 모두에 존재하는 몇 가지 일반적인 MyEntity
객체가있을 때입니다.
나는이 작업을하기 위해 많은 노력을했지만 아무 것도 문제를 극복하는 데 도움이되지 않습니다. 덧붙여서 FetchType.EAGER
& CascaseType.ALL, CascaseType.PERSIST
도 작동하지 않았습니다. EntityManager
은 메서드가없는 것 같습니다. 메서드보다 먼저 사용할 수 있습니다. 나는 persist()
으로 store()
을 교환하려고 시도했다 (내부적으로 상점에 저장한다).
참고 : - 참고 사항 : 이전 목록을 삭제하고 새로운 목록을 삽입하는 것은 요소를 비교하고 새 목록 만 추가하는 작업이 지루한 경우입니다 (목록이 꽤 거대 할 수 있음).
커밋은 트랜잭션의 실제 커밋 전에 플러시를 수행합니다. –