網頁

2021/5/5

Spring Data JPA 欄位允許null設定預設值 column nullable default value

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欄位若要設定預設值可在欄位上設定@ColumncolumnDefinition屬性定義其預設值,不過這對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

}


沒有留言:

張貼留言