Hibernate Help Needed
                    
            I'll try the approach that Lance used to solve my Hibernate problem.  First, I'll explain the problem.  In two days, if I haven't solved it - I'll bash on Hibernate and say it s***s (can't do it yet - right ;-), and then I'll claim it rocks once I get my problem solved.  Hmmm, it took Lance 4 days - I have 3 before my deadline (Thursday).  Luckily, I know of workarounds already (I just want to do things the recommended way) - therefore, I should never have to bash on Hibernate.
My problem is basically that I have a Parent object and it has a one-to-many relationship to a Child object.  This is usually a very simple thing to configure in a Parent.hbm.xml file.  To make things complicated, my Child object has a composite-id which is another class.  I can retrieve information just fine, but when I try to save the Parent, Hibernate tries to insert a new Child.  Here's the message I sent to the hibernate-devel mailing list:
** all classes extend from BaseObject with has equals(), 
   hashCode() and toString() methods.
Parent.java
---
private Long id;
private List children;
+appropriate getters/setters
Parent.hbm.xml
---
<bag role="children" table="CHILDREN" cascade="all">
    <key column="parent_id" length="22"/>
    <one-to-many class="eg.Child"/>
</bag>
Child.java
---
private ChildId id;
+appropriate getter/setter
ChildId.java
---
private Long parentId;
private Long recordNum;
+ appropriate getter/setters
Child.hbm.xml
---
<composite-id name="id"
    class="eg.ChildId"
    unsaved-value="none">
    <key-property column="parent_id" length="22" 
        name="parentId" type="long"/>
    <key-property column="record_num" length="22" 
        name="recordNum" type="long"/>
</composite-id>
I am able to retrieve children just fine, but when I try to save 
the parent, hibernate tries to do an insert and I get a unique 
constraint violation.
I'm calling the following method to save everything:
public Parent saveParent(Parent p) throws DAOException {
    storeObject(p);
    return (Parent) retrieveObject(eg.Parent.class, p.getId());
}
I got the storeObject method from one of the examples floating 
around, so it could definitely be my problem:
protected void storeObject(Object obj) throws DAOException {
    Session ses = null;
    try {
        ses = HibernateSession.currentSession();
        ses.saveOrUpdate(obj);
        ses.flush();
        ses.connection().commit();
    } catch (Exception e) {
        try {
            ses.connection().rollback();
        } catch (Exception ex) {
            e.printStackTrace();
        }
        ;
        throw new DAOException(e);
    } finally {
        try {
            HibernateSession.closeSession();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        ;
    }
}
As always, any help is greatly appreciated.



Posted by Matthew E. Porter on January 21, 2003 at 03:34 AM MST #
Posted by Matt Raible on January 21, 2003 at 04:56 AM MST #
Posted by Gavin on January 21, 2003 at 02:20 PM MST #
Posted by Matt Raible on January 21, 2003 at 02:42 PM MST #
Posted by Lance on January 21, 2003 at 03:45 PM MST #
Posted by Matt Raible on January 21, 2003 at 04:33 PM MST #
Posted by Lance on January 22, 2003 at 03:20 AM MST #
Posted by Doug Pham on July 27, 2003 at 05:01 PM MDT #