Title: saveOrUpdate vs. update

I have a BaseDAO that contains some generic (I think) Hibernate compatible code.  It's basically removeObject, storeObject, and retrieveObject.  I've found that Hibernate tries to do an INSERT if I use sess.saveOrUpdate in the following method:

    protected void storeObject(Object obj) throws DAOException
    {
        Session ses = null;

        try {
            ses = sessionFactory.openSession();
            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 {
                ses.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }

            ;
        }
    }

This causes an error, as there is already a user with this name.  So I tried changing it to just ses.update(obj), but now I'm getting the following error:

    [junit] Testcase: testAddResume(org.appfuse.persistence.UserDAOTest):       Caused an ERROR
    [junit] cirrus.hibernate.HibernateException: The given object has a null identifier property [org.appfuse.persistenc

e.Resume]
    [junit] org.appfuse.persistence.DAOException: cirrus.hibernate.HibernateException: The given object has a null ident

ifier property [org.appfuse.persistence.Resume]
    [junit]     at org.appfuse.persistence.BaseDAOHibernate.storeObject(BaseDAOHibernate.java:117)
    [junit]     at org.appfuse.persistence.UserDAOHibernate.addResume(UserDAOHibernate.java:117)
    [junit]     at org.appfuse.persistence.UserDAOTest.testAddResume(UserDAOTest.java:91)


All I'm trying to do is the following:

    user = dao.getUser("tomcat");
    user.setAddress("new address");
    User savedUser = dao.saveUser(user);
    assertEquals(savedUser.getAddress(), user.getAddress());

But it seems to be trying to go and persist the children - can I turn this off?  Also, I've noticed that my user's children are retrieved when I get the user's information.  Does this mean that if I create a bunch of mappings from user to other entities, that they're all going to be loaded when I get a user's information?  This might not be desirable since I get a user's information when they login, and if they have a whole bunch of records associated with their name… you get the idea…

Thanks,

Matt


Reply via email to