【问题标题】:Hibernate Delete Operation not updating MySql休眠删除操作不更新MySql
【发布时间】:2015-03-01 21:05:59
【问题描述】:

我的删除操作没有删除数据库中的重新编码。

我的实体类:

    @Entity  
@Table(name= "User")
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private int id;  
    private String userName,password,type,fullName; 

    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  

    public String getFullName() {  
        return fullName;  
    }  
    public void setFullName(String fName) {  
        this.fullName = fName;  
    }

    @Column(name = "USER_ID")
    public String getUserName() {  
        return userName;  
    }  
    public void setUserName(String userName) {  
        this.userName = userName;  
    }  
    public String getPassword() {  
        return password;  
    }  
    public void setPassword(String password) {  
        this.password = password;  
    }     
    public String getType() {  
        return type;  
    }  
    public void setType(String type) {  
        this.type = type;  
    }     



}

    @Entity  
@Table(name= "Cart")
public class Cart {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private int id; 
    private String userName;    
    private String itemSkus;
    private String itemsQuantity;


    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    } 

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "USER_ID")
    public String getUserName() {  
        return userName;  
    }  
    public void setUserName(String uName) {  
        this.userName = uName;  
    }

    public String getItems(){
        return this.itemSkus;
    }

    public void setItems(String items){
        this.itemSkus=items;
    }


    public String getItemsQuantity(){
        return this.itemsQuantity;
    }

    public void setItemsQuantity(String itemsQ){
        this.itemsQuantity=itemsQ;
    }



}

购物车的DAO类方法如下:

public int deleteCart(String userID){
    Session currentSession=sessionObject.getSession();
    //String query="from Cart Where  userName :uName";
    String query="DELETE FROM Cart where userName = :uName";

    Query queryResult = currentSession.createQuery(query);
    queryResult.setParameter("uName", userID);

    int result = queryResult.executeUpdate();

    System.out.println("Cart delete result "+result); 

    return result;
}

我尝试在 MySQL 工作台中运行查询,并且表格更新得很好。只有休眠它不更新。

我最终在更新查询结果中有许多结果。

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    将查询放入事务中,begin 它,execute the delete query 最后是 commit 事务和 rollback 它,当发生错误或异常时:

    public int deleteCart(String userID){
    
        Session currentSession=sessionObject.getSession();
        Transaction tr= currentSession.beginTransaction();
        //String query="from Cart Where  userName :uName";
      try{
        String query="DELETE FROM Cart where userName = :uName";
    
        Query queryResult = currentSession.createQuery(query);
        queryResult.setParameter("uName", userID);
    
        int result = queryResult.executeUpdate();
        tr.commit();
    
        System.out.println("Cart delete result "+result); 
    
        return result;
      } catch (Exception ex) {
           tr.rollback();
           return null;
      }
    }
    

    【讨论】:

      【解决方案2】:

      您的会话需要刷新。像这样printltln在你之前添加这一行。

      currentSession.flush();
      System.out.println("Cart delete result "+result);
      

      【讨论】:

      • 问题所有者说:_with hibernate 它不更新。_注意:flush() 将与内存中保存的对象/对象的当前状态同步数据库,但it does not commit the transaction(取决于闪存模式) .但commit() 将永久更新数据库。他可以在更新后随时使用闪光灯
      • Farhang Amary 'Ferhęg'。 Hibernate 的默认模式将刷新: +before some query executions, +from org.hibernate.Transaction.commit() +from Session.flush() 这回答了所有者的问题 - “休眠它不更新”参考:docs.jboss.org/hibernate/orm/3.3/reference/en/html/…跨度>
      • 太好了,所以仔细阅读链接并做一些测试,你就会得到这个结果:when tr.commit() is called in the default FlushMode , currentSession.flush() will be executed implicitly before execution of tr.commit().good lucky。
      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多