2015-03-01 2 views
0

Моя операция удаления не удаляет перекодировку в базе данных.Hibernate Удалить Операция не обновляется MySql

Мои объектные классы:

@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 верстаке и таблицы обновляется красиво. Только спящий режим не обновляется.

В итоге у меня есть количество результатов в результатах запроса обновления.

ответ

1

положить quesry внутри транзакции, 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; 
    } 
} 
0

Сеанс следует промыть. Добавьте эту строку до вас prinltln вот так.

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

владелец вопрос говорит: _with спящий режим его не updating._ уведомление: 'Flush()' будет синхронизировать базу данных с текущим состоянием объекта/объектов, удерживаемых в памяти, но 'она не совершает transaction' (зависит от режима вспышки). но 'commit()' обновит базу данных постоянным. он может использовать вспышку после обновления и в любое время, когда захочет – jfun

+0

Farhang Amary 'Ferhęg'. Режим Hibernate по умолчанию будет вымывать на: + перед некоторыми выполнениями запросов, + от org.hibernate.Transaction.commit() + от Session.flush() Это отвечает на вопрос владельца - «спящий режим его не обновляется» Ссылки: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html#objectstate-flushing – CKuharski

+0

Отлично, поэтому внимательно прочитайте ссылку и выполните несколько тестов, после чего вы получите следующий результат: ' когда trcelmit() вызывается в FlushMode по умолчанию, currentSession.flush() будет выполняться неявно перед выполнением tr.commit(). «Удачи. – jfun

Смежные вопросы