当前位置: 代码迷 >> Java Web开发 >> Sping、hibernate中的save方法
  详细解决方案

Sping、hibernate中的save方法

热度:52   发布时间:2016-04-16 23:56:09.0
求助Sping、hibernate中的save方法
自己写了一个注册页面,在dao中使用save方法怎样去判断是否insert成功,如果用boolean怎么去用

------解决方案--------------------
最好的办法是到数据库里面看看有没有你插入的记录
------解决方案--------------------
Returns: the generated identifier 
调用save方法之后返回被插入数据的主键

------解决方案--------------------
执行DAO方法之后返回pkey值就行。
------解决方案--------------------
引用:
Returns: the generated identifier 
调用save方法之后返回被插入数据的主键

here+1
------解决方案--------------------
引用:
this.getSession.save(user);
它返回的是Serialiazble,
如果成功会返回一个主键,但是失败的时候也返回一个主键


这个我倒没注意,文档里面也没有说明。
但如果真是这样的话:

1. 如果用的主键是自增长:
在执行插入之前获取主键最大值oldLastPrimaryKey,然后执行save返回主键再跟之前获得的oldLastPrimaryKey进行对比,如果大于oldLastPrimaryKey就表示插入成功,否则失败。

2. 如果用的主键是随机生成的:
在执行插入之前获取表中的count,然后执行save,然后再获取表中的count,对比下,如果大于原来的count就说明插入成功,否则失败。

感觉有点繁琐- -。。。而且并发问题还要注意

------解决方案--------------------
引用:
this.getSession.save(user);
它返回的是Serialiazble,
如果成功会返回一个主键,但是失败的时候也返回一个主键


根据返回的主键进行查询,如果查询到数据则插入成功,否则插入失败!
------解决方案--------------------
public boolean  save(entity obj){
    boolean b=false;
    try{
       this.getHibernateTemplate().save(obj);
       b=true;     
    }catch(Exception e){
       e.XXXX;
    }
    return b;
}
------解决方案--------------------
后台发出sql语句不报异常,基本就插入成功,不需要检查
------解决方案--------------------
HibernateTemplate中就有sava()方法   
HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作, Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持。大部分情况下,使用 Hibernate 的常规用法,就可完成大多数 DAO 对象的 CRUD 操作。下面是 HibernateTemplate 的常用方法简介:

q      void delete(Object entity) :删除指定持久化实例

q      deleteAll(Collection entities) :删除集合内全部持久化类实例

q      find(String queryString) :根据 HQL 查询字符串来返回实例集合

q      findByNamedQuery(String queryName) :根据命名查询返回实例集合

q      get(Class entityClass, Serializable id) :根据主键加载特定持久化类的实例

q      save(Object entity) :保存新的实例

q      saveOrUpdate(Object entity) :根据实例状态,选择保存或者更新

q      update(Object entity) :更新实例的状态,要求 entity 是持久状态

q      setMaxResults(int maxResults) :设置分页的大小
------解决方案--------------------
不知道楼主的主键是不是数字且自动增长。是的话,插入成功后就会返回一个大于0的主键id。你可以根据这个判断
  相关解决方案