我有一个方法,可以通过数据库中的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
答案 0 :(得分:0)
如果要复制实体,则必须先将其从会话中分离,将id设置为null,然后将其保留。