2016-04-14 113 views
0

我有一個表(USERS)的列:休眠SaveOrUpdate複合鍵

  1. 表ID - 整數
  2. USER_ID - 整數
  3. DATE - 日期時間
  4. VALUE - 雙人

這映射到User類:

@Table(name = "USERS") 
@Entity 
public class User implements Serializable { 

private static final long serialVersionUID = -6894800373034942671L; 

@Transient 
private String userName; 

@Id 
@Column(name = "TABLE_ID") 
private Integer tableId;  

@Column(name = "USER_ID") 
private Integer userId; 

@Column(name = "VALUE") 
private Double value; 

@Column(name = "DATE") 
private Date date; 

public User() { 

} 
// Getters and setters here 

}

表約束到位使用索引:

  1. 的table_id - 獨特和集羣
  2. USER_ID,DATE - 獨特的和非聚集

我將創建列表的User對象,每個對象具有不同的userId。如果對於特定的date,表中存在用戶記錄userId,我想更新其value,否則插入新的User對象。

我是否需要選擇使用HQL,爲缺失的那個創建新的User對象,然後運行saveOrUpdate?或者有沒有更好的方法?

如何使用hibernate實現上述目標?

回答

0

SaveOrUpdate方法會做得很好。但是不,如果你想更新記錄忘記,你必須首先從數據庫中獲取它防爆:

//in your Dao Class 
... 
public void save(User user){ 

    Transaction tx = null; 
    Session session = SessionFactoryUtil.getInstance().getCurrentSession(); 
    try { 
     tx = session.beginTransaction(); 
     session.saveOrUpdate(user); 
     tx.commit; 
    }catch(Exception e){ 
     tx.rollBack(); 
    } 
} 

public User getUserById(int user_id){ 
    User user=(User) session.get(User.class, user_id); 
    return user; 
} 

//creating new User 
User user1=new User(); 
user1.setName("Mohamed"); 
yourDao.save(user1); 


//updating an existing User 
User user2=yourDao.getUserById(19); 
user2.setCountry("Morocco"); 
yourDao.save(user2);