[hibernate-issues] [Hibernate-JIRA] Issue Comment Edited: (HHH-2305) refresh throws exception when database has been altered with a delete

Geli Crick (JIRA) noreply at atlassian.com
Thu Nov 17 12:24:19 EST 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44345#comment-44345 ] 

Geli Crick edited comment on HHH-2305 at 11/17/11 11:22 AM:
------------------------------------------------------------

I have the same problem. Another possible workaround for some situations is to evict and reload the object instead of refreshing it. It seems that reloading with get or load can fail in some situations (something to do with hibernate's cache maybe?) but using a query like find by id should work.

      was (Author: geli):
    I have the same problem. Another possible workaround for some situations is to evict and reload the object instead of refreshing it.
  
> refresh throws exception when database has been altered with a delete
> ---------------------------------------------------------------------
>
>                 Key: HHH-2305
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2305
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.2.1
>         Environment: Hibernate 3.2.1, Oracle 9.2
>            Reporter: Markus Heiden
>         Attachments: hibernate.zip
>
>
> First I save an entity with a collection of cascading entities in it and flush. Then I delete these cascaded entities with a sql query. When I now do a refresh on the entity an exception is thrown, because the cascaded entities couldn't be found in the database. I expected these entities to be deleted from the (in memory) collection of the entity instead.
> Test case is attached. Stacktrace of test case:
> Hibernate: select c0_.id as id2_0_, c0_.c as c2_0_ from C c0_ where c0_.id=?
> org.hibernate.UnresolvableObjectException: No row with the given identifier exists: [hibernate.refresh.C#30003]
> 	at org.hibernate.UnresolvableObjectException.throwIfNull(UnresolvableObjectException.java:42)
> 	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:126)
> 	at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:911)
> 	at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:894)
> 	at org.hibernate.engine.CascadingAction$4.cascade(CascadingAction.java:169)
> 	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
> 	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
> 	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
> 	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
> 	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:99)
> 	at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:911)
> 	at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:894)
> 	at org.hibernate.engine.CascadingAction$4.cascade(CascadingAction.java:169)
> 	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
> 	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
> 	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
> 	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
> 	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:99)
> 	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:39)
> 	at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:902)
> 	at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:886)
> 	at hibernate.refresh.Test.main(Test.java:46)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list