2016-02-10 44 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我更新了我的答案。 –

相關問題