2010-11-23 6 views
0

웹 응용 프로그램 (JBoss, Turbine, Hibernate)의 라이브 배포에서 예외가 발생했습니다. 예외를 재현 할 수 없으므로 버그를 해결할 수 없습니다.Hibernate DataException : 업데이트 할 수 없음

select sum(entity.totalPrice) from Entity entity where entity.parent.id = :parentId and deleted is null 

여러 개체는 하나 개의 상위에 속하는 :

org.hibernate.exception.DataException: could not update: [com.myproject.project.mypackage.objects.MyObject#1190] 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
     at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2425) 
     at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307) 
     at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607) 
     at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92) 
     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142) 
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
     at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:41) 
     at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969) 
     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114) 
     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) 

흥미로운 것은 다음과 같은 HQL이 실행될 때 내가 오류를 업데이트 할 수 없습니다이 를 얻을 수 있습니다 : 는 여기에 내가 얻을 예외 . 이 hql은 더 큰 업데이트 프로세스의 일부입니다. 다른 엔티티로 업데이트하려면 totalPrices의 합계가 필요합니다. 업데이트 할 수 없음이 업데이트 프로세스를 나타낼 수 있습니까? 업데이트가 실행되기 전에 오류가 발생했기 때문에 이런 경우는 아니라고 생각합니다. 보다 정확하게는 예외는 hql을 보유한 Query 객체에서 list() 메서드가 호출 될 때 발생합니다.

null로 설정된 엔터티의 totalPrice 예외를 재현하려고 시도했지만 예외가 발생하지 않았습니다. 동일한 상위 항목에 많은 항목이 연결되어 있고 총액의 합계가 한도를 초과하는 경우 을 삽입 할 수 없으므로 예외를 삽입 할 수 있습니다. 문제가 무엇인지 알 수 없습니다.

+1

하이버 네이트는 쿼리를 실행하기 전에 세션을 플러시한다. Stacktrace는 플러시 중에 오류가 발생했다고 분명하게 말합니다. – axtavt

+1

stacktrace에서 업데이트가 수행되고 있음을 보여주기 때문에 문제가'select sum (...) '을 실행할 수 없습니다. 업데이트는이 HSQL의 결과로 실행되었을 수도 있지만 이것은 데이터베이스가 오류를 던진 문장이 아닙니다. –

+0

감사합니다. 그것이 사실이었습니다. 이전 업데이트로 인해 발생했습니다! – Atticus

답변

0

간단히 삭제하는 대신 첫 번째 속성 이름을 entity.parent_identity.deleted으로 생각합니다. 같은 것을 있어야 최종 쿼리 ...

select sum(entity.totalPrice) from Entity entity where entity.parent_id = :parentId and entity.deleted is null 

이 PARENT_ID 속성 이름이 올바른지 확인하십시오.

관련 문제