如何在Hibernate中设置默认值

如何在Hibernate字段中设置默认值?

如果你想要一个真正的数据库默认值,请使用columnDefinition – @Column(name = "myColumn", nullable = false, columnDefinition = "int default 100") 。 请注意, columnDefinition中的string依赖于数据库。 另外,如果你select这个选项,你必须使用dynamic-insert ,所以Hibernate不会在插入时包含null值的列。 否则谈论违约是无关紧要的。

但是如果你不想要数据库默认值,而只是你的Java代码中的一个默认值,只需要初始化你的variables – private Integer myColumn = 100;

那么只需要为该字段设置一个默认值呢?

 private String _foo = "default"; //property here public String Foo 

如果他们传递一个值,那么它将被覆盖,否则,你有一个默认值。

您可以使用@PrePersist anotation,并在pre-persist阶段设置默认值。

类似的东西:

 //... some code private String myProperty; //... some code @PrePersist public void prePersist() { if(myProperty == null) //We set default value in case if the value is not set yet. myProperty = "Default value"; } // property methods @Column(nullable = false) //restricting Null value on database level. public String getMyProperty() { return myProperty; } public void setMyProperty(myProperty) { this.myProperty= myProperty; } 

这个方法不依赖于Hibernate下的数据库types/版本。 默认值在持久化映射对象之前设置。

如果你想在数据库中做到这一点:

在数据库中设置默认值(sql server示例):

 ALTER TABLE [TABLE_NAME] ADD CONSTRAINT [CONSTRAINT_NAME] DEFAULT (newid()) FOR [COLUMN_NAME] 

映射hibernate文件:

  <hibernate-mapping .... ... <property name="fieldName" column="columnName" type="Guid" access="field" not-null="false" insert="false" update="false" /> ... 

看,关键是insert =“false”update =“false”

上面提供的解决scheme使用Hibernate来设置Default值

 @Column(name = “myColumn”, nullable = false, columnDefinition = “int default 100") 

是特定于供应商的,不适用于Oracle。

一个解决scheme是让你的getter检查你正在使用的任何值是否为null(或者是什么非初始化状态),如果它等于那个,就返回你的默认值:

 public String getStringValue(){ return (this.stringValue == null) ? "Default" : stringValue; } 

我search了这一点,发现列的默认值的很多答案。如果你想使用SQL表中定义的默认值,那么@Column Annotation使用“insertable = false” 。 插入

@Column(name = columnName,length = lengthOfColumn,insertable = false)

如果你正在使用columnDefination @Column注解可能不会工作,因为它是数据库的依赖。

您可以使用java类构造函数来设置默认值。 例如:

 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 ... } 
 <property name="age" type="integer"> <column name="age" not-null="false" default="null" /> </property> 

使用Oracle,我试图为Enum插入一个默认值

我发现以下工作是最好的。

 @Column(nullable = false) @Enumerated(EnumType.STRING) private EnumType myProperty = EnumType.DEFAULT_VALUE; 

使用@ColumnDefault()注释。 这只是冬眠。

上面的build议工作,但只有在getter方法上使用注释。 如果注释是在声明成员的地方使用,则什么都不会发生。

 public String getStringValue(){ return (this.stringValue == null) ? "Default" : stringValue; }