를 작동하지 않는 개체를 제거 나는 일반적으로 잘 작동합니다 다음 코드가이 그냥 작동 내 엔티티 클래스의 많은JPA/최대 절전 모드는 가끔
public void delete(T object)
{
EntityManager em = getPersistence().createEntityManager();
EntityTransaction et = em.getTransaction();
try
{
et.begin();
object = em.find(object.getClass(), object.getId());
em.remove(object);
em.flush();
et.commit();
}
catch(Exception e)
{
error("Unable to delete " + object.toString() + ": there are references to it.");
}
finally
{
if (et.isActive()) et.rollback();
em.close();
}
}
합니다. 그러나 그것들 중 2 개는 아무 것도하지 않으며, 예외를 던지지도 않으며 객체를 삭제하지 않습니다. hibernate로부터의 로그는 hibernate가 다수의 select 질의들을 수행하지만 그것은 delete를 실행하려고 시도하지 않는다는 것을 보여준다.
이미 다른 유사한 질문 here 및 here에서 발견 제안을 시도했지만, 아무 소용 (물론, 후자는 내가 사용할 수 없습니다 @Transactional
을 제안하지만, 난 그냥 대신 begin()
및 commit()
사이의 문을 동봉).
나는이 두 클래스가 다른 것보다 많거나 적은 것을 찾을 수없는 것 같습니다. 그들은 내가 가지고있는 거의 모든 다른 엔티티처럼 @PrimaryKeyJoinColumn
을 사용합니다. 그들은 ohters처럼 @OneToMany
과 @ManyToOne
을 가지고 있습니다. 솔직히 말해서 그들은 다른 클래스를 참조하는 다른 클래스를 참조하는 @OneToOne(optional = false)
필드를 가지고 있지만 다른 엔티티는 가지고 있지 않지만 필드를 변경할 수 있다고 말하지 않으면 (그리고 결과적으로 데이터베이스 스키마를 변경하는) 번거로운 과정을 거치지는 않을 것입니다. 그 이유.
@OneToOne
은 무엇입니까? 아니면 내 삭제 코드 도청입니까?
cascade.ALL과 orphanRemoval = true를 추가하려고 시도 했습니까? – willome
@willome : 그것은 정반대의 문제였습니다. "너무 많이"계단식으로 연결되어있었습니다. 아래의 Steve Ebersole의 대답을 참조하십시오. –