2016-04-14 130 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);