Spring Data JPA新增時設定nullable欄位的預設值。
以Oracle為例,當資料表欄位允許null且設定有預設值如下,例如下面的EMPLOYEE.TENURE
。
CREATE TABLE "EMPLOYEE"
(
...
"TENURE" NUMBER DEFAULT 0, -- nullable column with default value 0
...
)
以上設定若以原生SQL insert語法會有效果,也就是不設定該欄位的插入值時,新增後EMPLOYEE.TENURE
的值為0。但若是用Spring Data JPA以new 一個entity儲存的話仍會是null。
網路查到Spring Data JPA的entity欄位若要設定預設值可在欄位上設定@Column
的columnDefinition
屬性定義其預設值,不過這對nullable的欄位毫無作用,新增後TENURE
的值仍為null。
@Table(name = "EMPLOYEE")
@Entity
public class Employee implements Serializable {
...
@Column(name = "TENURE", columnDefinition = "number default 0") // not working to nullable column
private Integer tenure;
// getters and setters
}
解決辦法是只好從物件上給定預設值。
@Table(name = "EMPLOYEE")
@Entity
public class Employee implements Serializable {
...
@Column(name = "TENURE")
private Integer tenure = 0; // 設定初始值
// getters and setters
}
在stackoverflow上有提到用hibernate的@ColumnDefault
來設定預設值,但測了一下並無效果。
@Table(name = "EMPLOYEE")
@Entity
public class Employee implements Serializable {
...
@ColumnDefault("0") // not work
@Column(name = "TENURE")
private Integer tenure = 0; // 設定初始值
// getters and setters
}
沒有留言:
張貼留言