如何在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; }
- 冬眠-公地注解-4.0.1.Final.jar; 无效的LOC头(坏签名)?
- 在Hibernate中使用@Temporal注解是什么?
- Spring 3.1inheritance的Hibernate 4exception
- Hibernate openSession()vs getCurrentSession()
- 使用复合主键和注解映射ManyToMany:
- hibernate:如何解决“从X到Y更改实例的标识符”?
- Hibernate的两个configuration文件的目的是什么?
- Spring 3.1,Hibernate 4,SessionFactory
- 没有Hibernate Session绑定到线程,configuration不允许在这里创build非事务性的