請建議我一種方法來更新 JPA 物體中的一列。我的代碼
@Entity
@Table(name = "my_table")
public class MyTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "mobile")
private Integer mobile;
@Column(name = "address")
private String address;
@Column(name = "gender")
private String gender;
}
當我想更新我的物體時,它會更新所有列,但只想更新一列
MyTable myTable = myRepo.findMyTableById(1);
myTable.setName("ra");
repo.save();
在這種情況下查詢列印
update Account set name=?, mobile=?, address=?, gender=? where id=?
但我只想更新一列值,為什么要更新所有列?
uj5u.com熱心網友回復:
您可以@DynamicUpdate在物體類中使用注釋。這將幫助您只更新一列實際上,當我們@DynamicUpdate在物體上使用時,Hibernate 不會使用快取的 SQL 陳述句進行更新。相反,它會在我們每次更新物體時生成一條 SQL 陳述句。此生成的 SQL 僅包括已更改的列。
為了找出改變的列,Hibernate 需要跟蹤當前物體的狀態。因此,當我們更改物體的任何欄位時,它會比較物體的當前狀態和修改后的狀態。所以,我希望現在可以在您的控制臺上列印。
update my_table set name=? where id=?
參考教程
uj5u.com熱心網友回復:
默認行為是當您更新 Hibernate 物體時,物體上的所有欄位都將在底層資料庫記錄中更新。請注意,這并沒有錯,假設用于更新列的值與最初讀取的值相同。
如果您真的想要更新單個列,您可以為此創建一個 JPA 存盤庫方法,例如
@Modifying
@Query("update MyTable m set m.name = :name where m.id = :id")
void updateName(@Param("name") String name, @Param("id") Long id);
如果您檢查上述生成的 SQL,它實際上只會更新一列。
請注意,在某些資料庫上,對值不變的列的更新實際上將被忽略,qv this SO question。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432631.html
上一篇:持久性例外外鍵約束在休眠中失敗
