-->
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.  [ 19 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: 2.1beta6 collection bug?
PostPosted: Sun Nov 23, 2003 2:13 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
Hello.
In short: Hibernate throws ConcurrentModificationException trying to initialize lazy collection.

I'm sorry for not providing mappings etc. here, but it will take time to isolate problem and paste only meaningful data here. Of course I will do it if it is absolutely necessary. I just hope someone may quickly guess where the problem rooted.

Code:
java.util.ConcurrentModificationException
   at java.util.HashMap$HashIterator.remove(HashMap.java:755)
   at net.sf.hibernate.impl.SessionImpl.endLoadingCollections(SessionImpl.java:3130)
   at net.sf.hibernate.loader.Loader.doResultSet(Loader.java:219)
   at net.sf.hibernate.loader.Loader.doFind(Loader.java:111)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:722)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:705)
   at net.sf.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:69)
   at net.sf.hibernate.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:306)
   at net.sf.hibernate.impl.SessionImpl.initialize(SessionImpl.java:3275)
   at net.sf.hibernate.collection.PersistentCollection.forceLoad(PersistentCollection.java:326)
   at net.sf.hibernate.Hibernate.initialize(Hibernate.java:255)


It looks like while Hibernate is initializing collection, SessionImpl.endLoadingCollections calls Set.endRead which loads another collection (?) and SessionImpl.endLoadingCollections gets called again. This method modifies loadingCollections hash and later when Set.endRead return, iterator in endLoadingCollections fails.

Again, I apologize for not providing full mapping & source, but this is really alot of code.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 2:32 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
We have had reports about ConcurrentModificationException before BUT
most of the times it is some "outside-of-hibernate" problem.

For the "other times" noone have never been able to produce a testcase that shows the problem (mainly because they like you say: "It is alot of code, so i can't find time to reduce it to a tetstcase") - for these other times our only explanation/guess have been some kind of JVM bug.

Thus, my "gut-feeling" says that the problem is in YOUR code, not Hibernates - BUT I also don't like that this ConcurrentModificationException problem pops up sometimes so I urge you to provide a failing testcase and prove me wrong in claiming it is your code that is the problem ;)

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 2:33 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
Just forgot: we don't want the complete example - just a reproducable main() method + hbm.xml's that fails.

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 3:31 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
Ok, I understand. I'll try to reproduce this bug with small example.

Meanwhile, just to let you know - I'm absolutely sure nesting calls of SessionImpl.endLoadingCollections occurs - I have seen this under debugger. While I was in this method, I steped over

Code:
lce.collection.endRead();


And breakpoint at the beginning of endLoadingCollections got hit again. Adding more logging shows that Set.endRead() causes some additional loading (because I see SQL which is executed) while running

Code:
set.addAll(tempList);


and this makes second entry into SessionImpl.endLoadingCollections


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 4:24 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
Sounds like you have a good chance of nailing a good example ;)

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 8:35 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
Here we go...

Database:

Code:
create table ORGANIZATION
(
  ORGANIZATION_ID NUMBER not null,
  NAME VARCHAR2(50) not null,
  WORKING_TIME_SET_ID NUMBER
);

create table PROJECT
(
  PROJECT_ID NUMBER not null,
  NAME VARCHAR2(50) not null
);

create table PROJECT_ORGANIZATION
(
  PROJECT_ID      NUMBER not null,
  ORGANIZATION_ID NUMBER not null,
  WEIGHT NUMBER not null
);

create table WORKING_TIME_SET
(
  WORKING_TIME_SET_ID NUMBER not null
);

create table WORKING_TIME
(
  WORKING_TIME_SET_ID NUMBER not null,
  WEEK_DAY NUMBER not null,
  WORKING_TIME_START DATE not null,
  WORKING_TIME_END DATE not null,
  IS_WORKING_DAY NUMBER(1) not null
);


Database data:
Code:
insert into project (project_id, name) values (1, 'test');
insert into project_organization (project_id, organization_id, weight) values (1, 100, 0);
insert into organization (organization_id, name, working_time_set_id) values (100, 'org', 200);
insert into working_time_set (working_time_set_id) values (200);
insert into working_time (working_time_set_id, week_day, working_time_start, working_time_end, is_working_day) values (200, 0, sysdate, sysdate, 1);



Mapping:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>

    <class name="Organization"
           table="ORGANIZATION"
           proxy="Organization">

        <id name="id" column="ORGANIZATION_ID" type="long">
            <generator class="sequence">
                <param name="sequence">SEQ_ORGANIZATION</param>
            </generator>
        </id>

        <property name="name" column="NAME" type="string" />

        <many-to-one name="workingTimeSet"
                     column="WORKING_TIME_SET_ID"
                     class="WorkingTimeSet"
                     cascade="all"
        />
    </class>

    <class name="Project"
           table="PROJECT"
           proxy="Project">

        <id name="id" column="PROJECT_ID" type="long">
            <generator class="sequence">
                <param name="sequence">SEQ_PROJECT</param>
            </generator>
        </id>

        <property name="name" column="NAME" type="string" />

        <set name="projectOrganizations" lazy="true" table="PROJECT_ORGANIZATION">
            <key column="PROJECT_ID"/>

            <composite-element class="ProjectOrganization">
                <property name="weight" type="double" />
                <many-to-one
                    name="organization"
                    class="Organization"
                    column="ORGANIZATION_ID"
                    not-null="true"
                 />
            </composite-element>
        </set>

    </class>


    <class name="WorkingTimeSet" table="WORKING_TIME_SET">
        <id name="id" column="WORKING_TIME_SET_ID" type="long">
            <generator class="sequence">
                <param name="sequence">SEQ_WORKING_TIME_SET</param>
            </generator>
        </id>
        <array name="times" table="WORKING_TIME" cascade="all">
            <key column="WORKING_TIME_SET_ID" />
            <index column = "WEEK_DAY" />
            <composite-element class="WorkingTime">
                <property name="start" column="WORKING_TIME_START" type="time" />
                <property name="end" column="WORKING_TIME_END" type="time" />
                <property name="isWorking" column="IS_WORKING_DAY" type="boolean" />
            </composite-element>
        </array>
    </class>

</hibernate-mapping>


Classes:

Code:
public class Organization
{
    private Long id;
    private String name;
    private WorkingTimeSet workingTimeSet;

    public int hashCode()
    {
        return (id == null) ? 0 : id.hashCode();
    }

    public boolean equals(Object object)
    {
        if (object == this)
            return true;
        else if ( !(object instanceof Organization) )
            return false;

        Organization other = (Organization) object;

        return id == null ? (other.getId() == null) : id.equals(other.getId());
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public WorkingTimeSet getWorkingTimeSet()
    {
        return workingTimeSet;
    }

    public void setWorkingTimeSet(WorkingTimeSet workingTimeSet)
    {
        this.workingTimeSet = workingTimeSet;
    }
}



import java.util.Set;

public class Project
{
    private Long id;
    private String name;
    private Set projectOrganizations;

    public int hashCode()
    {
        return (id == null) ? 0 : id.hashCode();
    }

    public boolean equals(Object object)
    {
        if (object == this)
            return true;
        else if ( !(object instanceof Project) )
            return false;

        Project other = (Project) object;

        return (id == null) ? (other.getId() == null) : id.equals(other.getId());
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public Set getProjectOrganizations()
    {
        return projectOrganizations;
    }

    public void setProjectOrganizations(Set projectOrganizations)
    {
        this.projectOrganizations = projectOrganizations;
    }

}

public class ProjectOrganization
{
    private Organization organization;
    private double weight;

    public int hashCode()
    {
        return (organization == null) ? 0 : organization.hashCode();
    }

    public boolean equals(Object object)
    {
        if (object == this)
            return true;
        else if ( !(object instanceof ProjectOrganization) )
            return false;

        ProjectOrganization other = (ProjectOrganization) object;

        return (organization == null) ? (other.getOrganization() == null) : organization.equals(other.getOrganization());
    }

    public Organization getOrganization()
    {
        return organization;
    }

    public void setOrganization(Organization organization)
    {
        this.organization = organization;
    }

    public double getWeight()
    {
        return weight;
    }

    public void setWeight(double weight)
    {
        this.weight = weight;
    }
}



import java.util.Date;

public class WorkingTime
{
    private Date start;
    private Date end;
    private boolean isWorking;

    public WorkingTime(){}

    public Date getEnd()
    {
        return end;
    }

    public void setEnd(Date end)
    {
        this.end = end;
    }

    public Date getStart()
    {
        return start;
    }

    public void setStart(Date start)
    {
        this.start = start;
    }

    public boolean getIsWorking()
    {
        return isWorking;
    }

    public void setIsWorking(boolean working)
    {
        isWorking = working;
    }
}


public class WorkingTimeSet
{
    private Long id;
    private WorkingTime[] times;

    public int hashCode()
    {
        return (id == null) ? 0 : id.hashCode();
    }

    public boolean equals(Object object)
    {
        if (object == this)
            return true;
        else if ( !(object instanceof WorkingTimeSet) )
            return false;

        WorkingTimeSet other = (WorkingTimeSet) object;

        return (id == null) ? (other.getId() == null) : id.equals(other.getId());
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public WorkingTime[] getTimes()
    {
        return times;
    }

    public void setTimes(WorkingTime[] times)
    {
        this.times = times;
    }
}


Code what runs this:

Code:
public class Test
{
    public static void main(String[] args)
    {
        SessionFactory sessionFactory = null;
        Configuration hibernateConfig = new Configuration();
        try
        {
            hibernateConfig.configure();
            sessionFactory = hibernateConfig.buildSessionFactory();
        }
        catch (HibernateException exception)
        {
            exception.printStackTrace(System.err);
            System.exit(0);
        }

        Connection conn = null;
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@XXXXXXX:1521:XXXX", "XXXX", "XXXX");
        }
        catch (Exception exception)
        {
            exception.printStackTrace(System.err);
            System.exit(0);
        }

        Session session = sessionFactory.openSession(conn);

        try
        {
            Project project = (Project) session.load(Project.class, new Long(1));

            project.getProjectOrganizations().iterator();
        }
        catch (HibernateException exception)
        {
            exception.printStackTrace(System.err);
            System.exit(0);
        }
    }
}



And what we finally get:

Code:
Hibernate: select project0_.PROJECT_ID as PROJECT_ID0_, project0_.NAME as NAME0_ from PROJECT project0_ where project0_.PROJECT_ID=?
Hibernate: select project_0_.weight as weight__, project_0_.ORGANIZATION_ID as ORGANIZA3___, project_0_.PROJECT_ID as PROJECT_ID__ from PROJECT_ORGANIZATION project_0_ where project_0_.PROJECT_ID=?
Hibernate: select workingt1_.WORKING_TIME_SET_ID as WORKING_TIME_SET_ID0_, organiza0_.ORGANIZATION_ID as ORGANIZATION_ID1_, organiza0_.NAME as NAME1_, organiza0_.WORKING_TIME_SET_ID as WORKING_3_1_ from ORGANIZATION organiza0_, WORKING_TIME_SET workingt1_ where organiza0_.ORGANIZATION_ID=? and organiza0_.WORKING_TIME_SET_ID=workingt1_.WORKING_TIME_SET_ID(+)
Hibernate: select working_0_.WORKING_TIME_START as WORKING_2___, working_0_.WORKING_TIME_END as WORKING_3___, working_0_.IS_WORKING_DAY as IS_WORKI4___, working_0_.WORKING_TIME_SET_ID as WORKING_1___, working_0_.WEEK_DAY as WEEK_DAY__ from WORKING_TIME working_0_ where working_0_.WORKING_TIME_SET_ID=?
[ERROR] PersistentCollection - -Failed to lazily initialize a collection <java.util.ConcurrentModificationException>java.util.ConcurrentModificationException
   at java.util.HashMap$HashIterator.remove(HashMap.java:755)
   at net.sf.hibernate.impl.SessionImpl.endLoadingCollections(SessionImpl.java:3122)
   at net.sf.hibernate.loader.Loader.doResultSet(Loader.java:219)
   at net.sf.hibernate.loader.Loader.doFind(Loader.java:111)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:722)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:705)
   at net.sf.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:69)
   at net.sf.hibernate.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:306)
   at net.sf.hibernate.impl.SessionImpl.initialize(SessionImpl.java:3267)
   at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:199)
   at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:69)
   at net.sf.hibernate.collection.Set.iterator(Set.java:131)
   at Test.main(Test.java:51)

net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection
   at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:205)
   at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:69)
   at net.sf.hibernate.collection.Set.iterator(Set.java:131)
   at Test.main(Test.java:51)
Caused by: java.util.ConcurrentModificationException
   at java.util.HashMap$HashIterator.remove(HashMap.java:755)
   at net.sf.hibernate.impl.SessionImpl.endLoadingCollections(SessionImpl.java:3122)
   at net.sf.hibernate.loader.Loader.doResultSet(Loader.java:219)
   at net.sf.hibernate.loader.Loader.doFind(Loader.java:111)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:722)
   at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:705)
   at net.sf.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:69)
   at net.sf.hibernate.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:306)
   at net.sf.hibernate.impl.SessionImpl.initialize(SessionImpl.java:3267)
   at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:199)
   ... 3 more
Exception in thread "main" Process terminated with exit code 1



What do you think?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 8:53 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
Hm... If I remove hashCode from ProjectOrganization, exception is not thrown. Have no idea why.

hashCode gets called two times on two different ProjectOrganization objects. Both of these objects point to the same instance of Organization...

does this explain anything?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 9:23 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
Please package this stuff up and submit it to JIRA. I really need to take a proper look into this. (Only trouble is: I kinda doubt that I will be able to reproduce it in my environment.) Make sure you let me know what JVM you are using.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 23, 2003 9:50 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
http://opensource.atlassian.com/project ... key=HB-494

You should have no problems running this test in your environment if you have Oracle server. Also, I think this test will produce the same results on any database - I believe this stuff is not database specific.

PS: I forgot to say: I haven't tried exactly this code on Hibernate 2.0.3, but when I have just discovered the problem (but not isolated it yet), switching to 2.0.3 helped - ConcurrentModificationException did not appear.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 4:06 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
OK, this was caused by having a proxied class that overrode equals() and hashCode(), in a Set. I've fixed it.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 5:23 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
ugh I should say:

a Set or objects which override equals/hashCode and call a method of a proxy from equals/hashCode, forcing initialization of the proxy


Its not really a good thing to do, but I fixed it anyway.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 5:35 am 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
Ahh... Got it. Of course, I can rework hashCode to use getId of parent object instead of its hashCode. Good point.

At least I hope the fix you applied could solve other ConcurrentModificationExceptions Max told about.

Thanks for great support.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 10:40 am 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
The saga continues :)

It it possible to obtain fixed version or patch? I tried to look on CVS web interface but did not see change.

Even if I have reimplemented hashCode, I still have problems. Concurrent exception gone, but now I see:

- An AssertionFailure occured - this may indicate a bug in Hibernate
net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections
at net.sf.hibernate.impl.SessionImpl$CollectionEntry.postFlush(SessionImpl.java:319)
at net.sf.hibernate.impl.SessionImpl.postFlush(SessionImpl.java:2737)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2259)


Note: this is produced not by the code I placed on JIRA. If you think it is caused by the same problem, I'll try to run it with never Hibernate version. If you think this may be unrelated issue, I'll try to minimize failing code again.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 10:50 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
I am quite sure that this is unrelated and due to you doing something illegal in a get/set pair or Interceptor callback that causes new objects to be loaded during the flush() process.

Nevertheless, isolating the problem is the correct approach to fixing it.

The fix will be available when anonymous CVS is updated (24 hours or so).


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 24, 2003 12:14 pm 
Expert
Expert

Joined: Tue Sep 16, 2003 4:06 pm
Posts: 318
Location: St. Petersburg, Russia
I have managed to fail the code I have already submitted to JIRA. Three small changes required. If necessary, I can pack another archive and open new issue. Or may be after a quick look you will say "this isn't a bug - you did something wrong".

1. fixing ProjectOrganization hashCode to avoid initializing Organization proxy:

Code:
        return (organization == null) ? 0 : organization.getId().hashCode();


2. add one more Organization to the database:

Code:
insert into organization (organization_id, name) values (101, 'org2');


3. Modify the test itself to attempt to add this Organization into Projects's collection of organizations:

Code:
            Project project = (Project) session.load(Project.class, new Long(1));
            Organization org = (Organization) session.load(Organization.class, new Long(101));

            ProjectOrganization po = new ProjectOrganization();
            po.setWeight(5);
            po.setOrganization(org);

            Set set = project.getProjectOrganizations();
            set.add(po);

            session.flush();



Run and get:

Hibernate: select project0_.PROJECT_ID as PROJECT_ID0_, project0_.NAME as NAME0_ from PROJECT project0_ where project0_.PROJECT_ID=?
Hibernate: select project_0_.weight as weight__, project_0_.ORGANIZATION_ID as ORGANIZA3___, project_0_.PROJECT_ID as PROJECT_ID__ from PROJECT_ORGANIZATION project_0_ where project_0_.PROJECT_ID=?
Hibernate: select workingt1_.WORKING_TIME_SET_ID as WORKING_TIME_SET_ID0_, organiza0_.ORGANIZATION_ID as ORGANIZATION_ID1_, organiza0_.NAME as NAME1_, organiza0_.WORKING_TIME_SET_ID as WORKING_3_1_ from ORGANIZATION organiza0_, WORKING_TIME_SET workingt1_ where organiza0_.ORGANIZATION_ID=? and organiza0_.WORKING_TIME_SET_ID=workingt1_.WORKING_TIME_SET_ID(+)
Hibernate: select workingt1_.WORKING_TIME_SET_ID as WORKING_TIME_SET_ID0_, organiza0_.ORGANIZATION_ID as ORGANIZATION_ID1_, organiza0_.NAME as NAME1_, organiza0_.WORKING_TIME_SET_ID as WORKING_3_1_ from ORGANIZATION organiza0_, WORKING_TIME_SET workingt1_ where organiza0_.ORGANIZATION_ID=? and organiza0_.WORKING_TIME_SET_ID=workingt1_.WORKING_TIME_SET_ID(+)
Hibernate: select working_0_.WORKING_TIME_START as WORKING_2___, working_0_.WORKING_TIME_END as WORKING_3___, working_0_.IS_WORKING_DAY as IS_WORKI4___, working_0_.WORKING_TIME_SET_ID as WORKING_1___, working_0_.WEEK_DAY as WEEK_DAY__ from WORKING_TIME working_0_ where working_0_.WORKING_TIME_SET_ID=?
[ERROR] AssertionFailure - -An AssertionFailure occured - this may indicate a bug in Hibernate <net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections>net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections
at net.sf.hibernate.impl.SessionImpl$CollectionEntry.postFlush(SessionImpl.java:319)
at net.sf.hibernate.impl.SessionImpl.postFlush(SessionImpl.java:2737)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2259)
at Test.main(Test.java:60)

net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections
at net.sf.hibernate.impl.SessionImpl$CollectionEntry.postFlush(SessionImpl.java:319)
at net.sf.hibernate.impl.SessionImpl.postFlush(SessionImpl.java:2737)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2259)
at Test.main(Test.java:60)
Exception in thread "main" Process terminated with exit code 1
Code:


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 19 posts ]  Go to page 1, 2  Next

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.