在复合键上休眠SaveOrUpdate

时间:2016-04-14 23:35:42

标签: mysql hibernate hql

我有一个表(USERS),其中包含列:

  1. TABLE_ID - 整数
  2. USER_ID - 整数
  3. DATE - DateTime
  4. VALUE - Double
  5. 这映射到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 - 唯一且非群集
    3. 我将创建User个对象的列表,每个对象都有不同的userId。如果对于特定的date,表中存在userId的用户记录,我想更新其value,否则插入新的User对象。

      我是否需要使用HQL选择,为缺少的对象创建新的User对象,然后运行saveOrUpdate?还是有更好的方法吗?

      如何使用hibernate实现上述目标?

1 个答案:

答案 0 :(得分:0)

SaveOrUpdate方法会很好..但不要忘记,如果你想更新一条记录,你必须首先从数据库中获取它以获取Ex:

//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);