-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: New in 3.1 rc1: ConcurrentModificationException
PostPosted: Sun Oct 16, 2005 5:25 pm 
Beginner
Beginner

Joined: Wed Sep 28, 2005 5:30 pm
Posts: 25
Here is a testcase that works in Hibernate 3.05 but fails in Hibernate 3.1 rc1 -- this looks similar to http://opensource2.atlassian.com/projec ... se/HHH-971 which has already been confirmed.

The problem is that if you invoke Session.refresh() on the same object twice in a row, the second time a ConcurrentModificationException will occur.

Hibernate version: 3.1 rc1

Mapping documents:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : DefaultTheme.hbm.xml
    Created on : April 27, 2005, 11:43 AM
-->

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="desktopbeautifier.server.database">
  <class name="DefaultTheme" table="theme">
    <cache usage="read-write"/>
    <id name="id">
      <generator class="native"/>
    </id>
    <version name="version"/>

    <property name="name" length="50" not-null="true"/>
    <property name="descendantImageCount" type="int" not-null="true"/>

    <set name="children" cascade="all-delete-orphan" sort="unsorted"
      inverse="true">
      <cache usage="read-write"/>
      <key>
        <column name="parentId"/>
      </key>
      <one-to-many class="DefaultTheme"/>
    </set>
   
    <set name="allImages" cascade="all-delete-orphan" sort="unsorted"
      inverse="true">
      <cache usage="read-write"/>
      <key>
        <column name="themeId"/>
      </key>
      <one-to-many class="AbstractImage"/>
    </set>

    <many-to-one name="parentDirectly" class="DefaultTheme" column="parentId"/>
  </class>
</hibernate-mapping>



<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : Image.hbm.xml
    Created on : April 27, 2005, 4:42 PM
-->

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="desktopbeautifier.server.database">
  <class name="AbstractImage" table="image">
    <cache usage="read-write"/>
    <id name="id">
      <generator class="native"/>
    </id>
    <discriminator column="discriminator"/>
    <version name="version"/>
   
    <many-to-one name="imageData" class="ImageData" column="dataId"
    cascade="all" not-null="true"/>
    <many-to-one name="dataSpecification" class="DefaultImageSpecification"
    column="specificationId" cascade="save-update" not-null="true"/>
    <many-to-one name="themeDirectly" class="DefaultTheme" column="themeId"
    cascade="save-update" not-null="true"/>
       
    <subclass name="DefaultOriginalImage">
    </subclass>
   
    <subclass name="DefaultCachingImage">
    </subclass>
  </class>
</hibernate-mapping>



<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : DefaultImageSpecification.hbm.xml
    Created on : April 27, 2005, 4:33 PM
-->

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="desktopbeautifier.server.database">
  <class name="DefaultImageSpecification" table="image_specification">
    <cache usage="read-write"/>
    <id name="id">
      <generator class="native"/>
    </id>
    <version name="version"/>
   
    <properties name="unique" unique="true">
      <property name="width" not-null="true"/>
      <property name="height" not-null="true"/>
      <property name="colorDepth" not-null="true"/>
    </properties>
  </class>
</hibernate-mapping>



<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : ImageData.hbm.xml
    Created on : April 27, 2005, 4:42 PM
-->

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="desktopbeautifier.server.database">
  <class name="ImageData" table="image_data">
    <cache usage="read-write"/>
    <id name="id">
      <generator class="native"/>
    </id>
    <version name="version"/>
   
    <set name="images" cascade="save-update" sort="unsorted"
      inverse="true">
      <cache usage="read-write"/>
      <key>
        <column name="dataId"/>
      </key>
      <one-to-many class="AbstractImage"/>
    </set>
    <property name="data" length="2000000" not-null="true"/>
  </class>
</hibernate-mapping>


Code between sessionFactory.openSession() and session.close():
Transaction transaction = session.beginTransaction();
try
{
Query getDogs = session.createQuery("from " + Theme.class.getName() +
" as theme where theme.name='Dogs'");

Theme dogs = (Theme) getDogs.uniqueResult();
System.out.println("dogs1=" + dogs);
session.refresh(dogs);

System.out.println("dogs2=" + dogs);

session.refresh(dogs);
System.out.println("dogs3=" + dogs);
}
finally
{
transaction.rollback();
}

Full stack trace of any exception that occurs:
Code:
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
        at java.util.HashMap$KeyIterator.next(HashMap.java:823)
        at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
        at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
        at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
        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:796)
        at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:786)
        at hibernate.Testcase.testIncrement(Testcase.java:58)

Name and version of the database you are using:
MySQL 4.14-nt

The generated SQL (show_sql=true):
Code:
Hibernate: select defaultthe0_.id as id6_, defaultthe0_.version as version6_, defaultthe0_.name as name6_, defaultthe0_.descendantImageCount as descenda4_6_, defaultthe0_.parentId as parentId6_ from theme defaultthe0_ where defaultthe0_.name='Dogs'
Hibernate: select children0_.parentId as parentId1_, children0_.id as id1_, children0_.id as id6_0_, children0_.version as version6_0_, children0_.name as name6_0_, children0_.descendantImageCount as descenda4_6_0_, children0_.parentId as parentId6_0_ from theme children0_ where children0_.parentId=?
Hibernate: select defaultthe0_.id as id6_2_, defaultthe0_.version as version6_2_, defaultthe0_.name as name6_2_, defaultthe0_.descendantImageCount as descenda4_6_2_, defaultthe0_.parentId as parentId6_2_, children1_.parentId as parentId4_, children1_.id as id4_, children1_.id as id6_0_, children1_.version as version6_0_, children1_.name as name6_0_, children1_.descendantImageCount as descenda4_6_0_, children1_.parentId as parentId6_0_, allimages2_.themeId as themeId5_, allimages2_.id as id5_, allimages2_.id as id7_1_, allimages2_.version as version7_1_, allimages2_.dataId as dataId7_1_, allimages2_.specificationId as specific5_7_1_, allimages2_.themeId as themeId7_1_, allimages2_.discriminator as discrimi2_7_1_ from theme defaultthe0_ left outer join theme children1_ on defaultthe0_.id=children1_.parentId left outer join image allimages2_ on defaultthe0_.id=allimages2_.themeId where defaultthe0_.id=?
Hibernate: select imagedata0_.id as id8_0_, imagedata0_.version as version8_0_, imagedata0_.data as data8_0_ from image_data imagedata0_ where imagedata0_.id=?
Hibernate: select imagedata0_.id as id8_0_, imagedata0_.version as version8_0_, imagedata0_.data as data8_0_ from image_data imagedata0_ where imagedata0_.id=?
Hibernate: select imagedata0_.id as id8_0_, imagedata0_.version as version8_0_, imagedata0_.data as data8_0_ from image_data imagedata0_ where imagedata0_.id=?
Hibernate: select defaultori0_.id as id7_0_, defaultori0_.version as version7_0_, defaultori0_.dataId as dataId7_0_, defaultori0_.specificationId as specific5_7_0_, defaultori0_.themeId as themeId7_0_ from image defaultori0_ where defaultori0_.id=? and defaultori0_.discriminator='desktopbeautifier.server.database.DefaultOriginalImage'


Top
 Profile  
 
 Post subject:
PostPosted: Mon Oct 17, 2005 1:10 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
this is not the same as hhh-971 which is a configuration time issue with property-ref in component.

your issue is at runtime and should be reported as a seperate issue (would be good if you could cut the hbm.xml down to the minimum to recreate the refreshx2 issue)

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Mon Oct 17, 2005 10:36 am 
Beginner
Beginner

Joined: Wed Sep 28, 2005 5:30 pm
Posts: 25
FYI: Filed http://opensource2.atlassian.com/projec ... tion_20300


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.