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方法设置主键值。(显示)

  • 相关阅读:
    BZOJ2705: [SDOI2012]Longge的问题 欧拉函数
    BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
    BZOJ1296: [SCOI2009]粉刷匠 DP
    BZOJ5293: [Bjoi2018]求和 树上差分
    BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法
    BZOJ5189: [Usaco2018 Jan]Cow at Large 贪心+LCA
    BZOJ2654: tree 二分答案+最小生成树
    BZOJ1304: [CQOI2009]叶子的染色 树形dp
    BZOJ1632: [Usaco2007 Feb]Lilypad Pond SPFA+最短路计数
    BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路 K短路
  • 原文地址:https://www.cnblogs.com/360-782/p/Hibernate.html
Copyright © 2011-2022 走看看