如何在Hibernate字段中设置默认值?
如何在Hibernate字段中设置默认值?
@DynamicInsert
定义为true,否则只需定义@DynamicInsert
。因为Hibernate默认为true。请考虑以下示例:@AllArgsConstructor
@Table(name = "core_contact")
@DynamicInsert
public class Contact implements Serializable {
@Column(name = "status", columnDefinition = "int default 100")
private Long status;
}
public class Entity implements Serializable{
private Double field1
private Integer field2;
private T fieldN;
public Entity(){
this.field1=0.0;
this.field2=0;
...
this.fieldN= <your default value>
}
//Setters and Getters
...
}
我试过了,当我这样做时
@Column(name = "is_sale", columnDefinition = "default false")
private boolean isSale = false;
他没有添加。而当我添加时
@Column(name = "is_sale", columnDefinition = "bool default false")
private boolean isSale = false;
alter table if exists customer_product add column is_sale bool default false
<property name="age" type="integer">
<column name="age" not-null="false" default="null" />
</property>
@Column(name = "ACCOUNT_TYPE", ***nullable***=false, columnDefinition="varchar2 default 'END_USER'")
@Enumerated(EnumType.STRING)
private AccountType accountType;
我们可以使用带有 @Column 注释的 getter。
所有的 @Column 应该只在 getter 中进行注释,而不是直接变量声明。通过这种方式,我们可以解决它。
@Column(name = "string_value")
public String getStringValue(){
return (this.stringValue == null) ? "Default" : stringValue;
}
@Column(columnDefinition = "int default 1")
。private Integer attribute = 1;
。insertable = false, updatable = false
可以防止实体创建新的子实体并覆盖默认的DBMS值。但是这样做的问题是,我们必须始终使用默认值,或者如果我们需要实体包含另一个不是默认值的子实体,则必须尝试在运行时更改这些注释为insertable = true, updatable = true
,因此这似乎不是一条好路线。insertable = false, updatable = false
更有意义,这样无论我们使用哪种方法(使用@DynamicInsert
将不需要),都不会创建更多的子实体。但是使用@DynamicInsert
当我们想要插入一个具有默认值的子实体时,可以避免将null发送到数据库,并且反过来,我们允许插入具有非默认值的子实体。
对于插入操作,此实体应使用动态SQL生成,其中只有非null列在准备好的SQL语句中被引用吗?
给定以下需求:
DBMS: PostgreSQL | 语言: Kotlin
@Entity
@Table(name = "entity")
@DynamicInsert
data class EntityTest(
@Id @GeneratedValue @Column(name = "entity_uuid") val entityUUID: UUID? = null,
@OneToOne(cascade = [CascadeType.ALL])
@JoinColumn(name = "subentity_uuid", referencedColumnName = "subentity_uuid")
var subentityTest: SubentityTest? = null
) {}
@Entity
@Table(name = "subentity")
data class SubentityTest(
@Id @GeneratedValue @Column(name = "subentity_uuid", insertable = false, updatable = false) var subentityUUID: UUID? = null,
@Column(insertable = false, updatable = false) var name: String,
) {
constructor() : this(name = "")
}
并且默认情况下在数据库中设置了该值:
alter table entity alter column subentity_uuid set default 'd87ee95b-06f1-52ab-83ed-5d882ae400e6'::uuid;
GL