【发布时间】:2012-10-15 18:14:46
【问题描述】:
我在互联网上搜索并看到了有关在 mysql 中使用休眠注释在实体类中设置默认值的想法,并且我已经将默认值设置为仅具有数据类型整数的列,如下所示。
@Column(name = "COLUMN_NAME", insertable=false, updatable = false, nullable = false, columnDefinition = "int default 1")
protected Integer test_id;
并且工作正常。
但我还没有看到任何 varchar/string 数据类型的示例,我尝试在 columnDefinition 中使用不同的类型,例如,
columnDefinition = "TEXT default `TEST`"
columnDefinition = "TEXT default TEST"
columnDefinition = "varchar(255) default `15-JUL-1980`")
columnDefinition = "varchar(255) default 15-JUL-1980")
columnDefinition = "varchar default 15-JUL-1980")
columnDefinition = "varchar default `15-JUL-1980`")
columnDefinition = "CHAR(100) default `15JUL1980`")
columnDefinition = "CHAR default `15JUL1980`")
带长度属性:-
`length=100, columnDefinition = "CHAR default `15JUL1980`")`
等等
但在这种情况下,表不是由休眠创建的,这可能是由于语法错误。 但是,如果我创建的表只有整数值,则创建上表。
【问题讨论】:
-
用引号将
15-JUL-1980括起来,例如columnDefinition = "varchar(255) default '15-JUL-1980'"。此外,这应该对您有所帮助:stackoverflow.com/questions/197045/… -
感谢亚历克斯和您的权利。实际上我正在通过修改实体类来更改现有表,但是在掺杂现有表并让休眠创建新表之后它正在工作。在表删除和新运行的应用程序正在使用 [@Column(name = "cname", insertable=false, updatable = false, nullable = false, columnDefinition = "varchar(255) default '15-JUL-1980'") ] 很好。
-
这仅适用于新表,但是否有任何想法将更改应用于现有表。
-
对于现有表,以及新的插入/更新,您可以直接在 Java 中设置默认值,如
@Column(.., columnDefinition = "varchar(255) default '15-JUL-1980'") private String myVar = "15-JUL-1980";。当 Hibernate 将创建一个新实例时,该变量已设置为默认值。