如何在休眠字段中設置默認值?如何在休眠中設置默認值
回答
如果您想要真正的數據庫默認值,請使用columnDefinition - @Column(name = "myColumn", nullable = false, columnDefinition = "int default 100")
。請注意,columnDefinition
中的字符串依賴於數據庫。此外,如果選擇此選項,則必須使用dynamic-insert
,因此Hibernate
不包括插入時帶有null
值的列。否則談論違約是無關緊要的。
但是,如果你不想數據庫默認值,而僅僅是在Java代碼中的默認值,只是初始化變量這樣的 - private Integer myColumn = 100;
只需爲該字段設置默認值,該怎麼辦?
private String _foo = "default";
//property here
public String Foo
如果他們傳遞一個值,那麼它將被覆蓋,否則,你有一個默認值。
這並不會阻止某人在某個時刻將其設置爲空。 – michali 2014-10-21 11:17:11
@michali:默認值的作用是不阻止更新值,是嗎? – 2016-09-12 11:16:19
一種解決方案是讓你的getter檢查,看是否任何價值您正在使用的是空(或任何其非初始化的狀態會),如果它是等於,只返回默認值:如果你想要做它在數據庫
public String getStringValue(){
return (this.stringValue == null) ? "Default" : stringValue;
}
我正在使用調用實體對象上的setter的映射器。在getter和setter上使用你的代碼片段有缺點嗎? – 2016-01-06 15:41:10
:
設置默認值UE在數據庫(SQL Server樣品):
ALTER TABLE [TABLE_NAME] ADD CONSTRAINT [CONSTRAINT_NAME] DEFAULT (newid()) FOR [COLUMN_NAME]
映射休眠文件:
<hibernate-mapping ....
...
<property name="fieldName" column="columnName" type="Guid" access="field" not-null="false" insert="false" update="false" />
...
見,關鍵是插入= 「假」 更新= 「假」
Oracle存在問題:如果該屬性不爲空,則其值仍爲默認值。不是實際值。 – youngzy 2016-01-19 08:18:17
您可以使用@ 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(String myProperty) {
this.myProperty= myProperty;
}
這種方法不依賴於數據庫類型/版本Hibernate的下方。默認值在持久化映射對象之前設置。
由於'setMyProperty'沒有被你的例子使用。你爲什麼包括它? – EndermanAPM 2017-12-28 14:27:25
我只給出了標準java屬性(使用public get/set方法的私有變量)的hibernate註釋示例。我注意到並糾正了一個錯誤...設置方法argumet的字符串類型丟失。 – dbricman 2018-02-27 15:36:25
上述建議有效,但前提是隻有在getter方法上使用註釋。如果在成員聲明的地方使用註釋,則不會發生任何事情。
public String getStringValue(){
return (this.stringValue == null) ? "Default" : stringValue;
}
<property name="age" type="integer">
<column name="age" not-null="false" default="null" />
</property>
介意[解釋你的解決方案](http://stackoverflow.com/help/how-to-answer)有點?你可能想閱讀[我如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)。 – 2015-04-27 12:31:50
我搜索了這一點,並發現了許多答案爲column.If默認值要使用SQL表定義,那麼在@Column批註默認值使用「插入=假」 。如果您正在使用columnDefination它@Column批註可能它不會工作,因爲它取決於數據庫插入
@Column(名稱=列名,長度= lengthOfColumn,插入= FALSE)
。
與甲骨文合作,我試圖插入一個默認值枚舉
我發現下面的工作是最好的。
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private EnumType myProperty = EnumType.DEFAULT_VALUE;
您可以使用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
...
}
使用@ColumnDefault()
註釋。這只是休眠狀態。
使用Hibernate註釋
@ColumnDefault("-1")
private Long clientId;
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/18356040) – Mamun 2017-12-27 00:55:13
如果你想設置在數據庫方面的默認值,只需設置@Column(columnDefinition = "int default 1")
但是,如果你打算什麼是你的Java應用程序,你可以設置默認值將其設置爲您的類屬性,如下所示:private Integer attribute = 1;
- 1. 如何將默認值設置爲休眠關係
- 2. 默認日期值休眠
- 3. 休眠hbm2ddl.auto默認值
- 4. 默認值處於休眠
- 5. 休眠上選擇設置默認值,如果空
- 6. 如何在DropDownListFor中設置默認值
- 7. 如何在NopDropDownList中設置默認值...?
- 8. 如何在jsp中設置默認值?
- 9. 如何在text_field中設置默認值?
- 10. 如何在forge.prefs中設置默認值?
- 11. 如何在Jplayer中設置默認值
- 12. 休眠更新與默認值
- 13. 休眠列表鍵沒有默認值
- 14. 暫時成員的休眠默認值
- 15. 如何設置默認值
- 16. 如何設置默認值?
- 17. JPA /休眠 - 默認數據
- 18. 休眠默認連接池
- 19. 如何設置休眠
- 20. 休眠設置布爾值
- 21. 休眠設置
- 22. 休眠會話模式默認設置爲手動
- 23. 如何在DataTemplate上設置默認值?
- 24. 休眠將數據庫列重置爲默認值?
- 25. 設置默認值
- 26. 設置默認值
- 27. 設置默認值
- 28. 設置默認值
- 29. 設置默認值
- 30. 設置默認值
您是否使用XML配置文件或註釋? – Bruno 2010-06-24 13:23:36
下面的答案只給JPA解決方案,這是正確的,但對於Hibernate解決方案,請參閱http://stackoverflow.com/questions/28107554/define-default-column-value-with-annotations-in-hibernate你必須使用'@ ColumnDefault' – pdem 2016-09-20 07:25:49