保存mathod为GenericDao

时间:2018-02-20 14:19:51

标签: java spring hibernate

我有一个方法,可以通过数据库中的Id找到对象

ClassA obj = getDao().find(id);

然后我更新了我的对象obj.setName("newName");

之后我保存了我的对象getDao().save(obj);

在通用DAO的方法保存中首先验证会话是否包含返回false的对象

/**
     * <p>
     * If an entity already exists in the datastore with the same id, call
     * _update and return false (not new). If no such entity exists in the
     * datastore, call _save() and return true (new)
     * 
     * @return <code>true</code> if _save(); <code>false</code> if _update().
     */
    protected boolean _saveOrUpdateIsNew(Object entity) {
        if (entity == null)
            throw new IllegalArgumentException("attempt to saveOrUpdate with null entity");

        Serializable id = getMetadataUtil().getId(entity);
        if (getSession().contains(entity))
            return false;

        if (id == null || (new Long(0)).equals(id) || !_exists(entity)) {
            _save(entity);
            return true;
        } else {
            _update(entity);
            return false;
        }
    }

我需要从sesison hibernate中删除我的obj,或者是否有解决方法来避免这个问题。

因为我的方法返回false;和任何保存的对象。

UPDAT

我验证了这种情况return false

if (id == null || (new Long(0)).equals(id) || !_exists(entity)) {
            _save(entity);
            return true;
        }

id具有正确的值id = 522

1 个答案:

答案 0 :(得分:0)

如果要复制实体,则必须先将其从会话中分离,将id设置为null,然后将其保留。