2016-02-10 45 views
0

我想问如何将一个值(int或小数类型)添加到具有现有值的列(具有相同类型)。将数值添加到具有Hibernate中的现有值的数字类型列

如果我用的是Java,我可以轻松地说:

int load_balance = 1250; 
load_balance += 75; 

但是,我怎么正确地做到这一点在Hibernate中?

会是?

  1. 获取当前LOAD_BALANCE值
  2. the_amount添加到当前的LOAD_BALANCE值。
  3. 保存或更新load_balance。

不确定什么是这种情况下最好的休眠练习。

回答

1

您可以轻松地通过使用setter方法如下面做这件事情:

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

    @Id 
    private int id; 

    @Column(name = "LOAD_NUMBER") 
    private Integer loadNumber; 

    @Column(name = "LOAD_BALANCE") 
    private Double loadBalance; 

    public void setLoadNumber(Integer loadNumber) { 
     int prev = this.loadNumber != null ? this.loadNumber : 0; 
     this.loadNumber = prev + loadNumber; 
    } 

    public void setLoadBalance(Double loadBalance) { 
     double prev = this.loadBalance != null ? this.loadBalance : 0.0; 
     this.loadBalance = prev + loadBalance; 
    } 

} 
+0

感谢您的想法兄弟。 –

0

您可以使用HQL了点。举个例子,如果你有一个实体

@Entity 
@Table(name = "app_balances") 
public class Balance { 

    @Id 
    @GeneratedValue 
    @Column(name = "f_pid") 
    private Long pid; 

    @Column(name = "f_load_balance") 
    private Integer loadBalance; 

} 

对应HQL更新loadBalance

String query = "update Balance set loadBalance = loadBalance + 1 where pid = :balancePid"; 

Query query = session.createQuery(query); 
query.setParameter("balancePid", balancePid); 
query.executeUpdate(); 

它转换为SQL相似,并通过数据库中执行。它比session.update()快一点,因为你不需要加载Balance持久性。但是,我认为,对于一个记录来说并不重要(并且由于随机效应,缓存等原因它可能会变慢)。

+0

它会像我只是运行一个executeUpdate?这会比session.update更快吗? –

+0

@BorgyManotoy我更新了我的答案。 –

相关问题