zoukankan      html  css  js  c++  java
  • 使用hibernate更新数据库记录的信息的相关学习记录

    截选代码(可能遗漏标点符号):

    package name.sql;

    import java.util.List;

    import name.session.HibernateSessionFactory;

    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;

     

    public class SqlHelper {
    //增
    public void save(Object obj){
    //注意:对obj调用完构造函数或者set赋值后才传入
    Session session=HibernateSessionFactory.getSession();
    Transaction tr=session.beginTransaction(); //开始事务
    try{
    session.save(obj);
    tr.commit();
    }catch(Exception e){
    tr.rollback();
    System.out.println("保存出错,已回滚�:"+e);
    }
    session.close();
    System.out.println("保存成功");
    }
    //删
    public void delete(Object obj){
    //注意:调用该函数前(即传参进来的时候),先对obj调用set方法设置主键值,然后才能调用该函数
    Session session=HibernateSessionFactory.getSession();
    Transaction tr=session.beginTransaction(); //开始事务
    try{
    session.delete(obj);
    tr.commit();
    }catch(Exception e){
    tr.rollback();
    System.out.println("删除出错,已回滚�:"+e);
    }
    session.close();
    System.out.println("删除成功");
    }
    //改
    public void update(Object obj){
    //注意:调用该函数前(即传参进来的时候),先对obj调用set方法设置主键值,然后才能调用该函数
    Session session=HibernateSessionFactory.getSession();
    Transaction tr=session.beginTransaction(); //开始事务
    try{
    // obj=session.get(obj.getClass(),1);
    System.out.println(obj);
    session.update(obj);
    tr.commit();
    }catch(Exception e){
    tr.rollback();
    System.out.println("更新出错,已回滚�:"+e);
    }
    session.close();
    System.out.println("更新成功");
    }
    /*查询,并返回查询集*/
    public List query(String sqlcmd){
    /*注意:此处sqlcmd的查询语句书写:如 "from name.Reader where reader_id='sumihui'"
    *from的是类名,不是表名!!!*/
    Session session=HibernateSessionFactory.getSession();
    Query query=session.createQuery(sqlcmd);
    @SuppressWarnings("unchecked")
    List list=query.list();
    return list;
    }

    }

    [遇见的问题清单]:

    在使用hibernate更新数据库记录的信息时,出现org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 错误。

    原因分析: 
    我在更新数据时,显式地使用了id的setId()方法为其指定值。但是我的实体类的id指定了主键生成策略(@GeneratedValue(strategy = GenerationType.AUTO)),此时不能显式使用setId()方法设置id的值。

    解决方法: 
    不要显式地使用setId方法设置主键值。(显示)

  • 相关阅读:
    5分钟机器学习
    快速排序
    数据预处理 总结
    正则化 / 特征选择
    424. 替换后的最长重复字符 sliding window中的注意点
    自然语言处理算法精讲P3
    76. 最小覆盖子串
    3.无重复字符的最长子串 —— sliding window
    自然语言处理算法精讲 P1
    18.四数之和
  • 原文地址:https://www.cnblogs.com/360-782/p/Hibernate.html
Copyright © 2011-2022 走看看