Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MYSQL中使用hibernate注释设置默认值_Java_Hibernate - Fatal编程技术网

Java 在MYSQL中使用hibernate注释设置默认值

Java 在MYSQL中使用hibernate注释设置默认值,java,hibernate,Java,Hibernate,我在互联网上搜索过,看到了关于在mysql中使用hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为数据类型为integer的列,如下所示 @Column(name = "COLUMN_NAME", insertable=false, updatable = false, nullable = false, columnDefinition = "int default 1") protected Integer test_id; 而且工作正常 但是我没有看到任何var

我在互联网上搜索过,看到了关于在mysql中使用hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为数据类型为integer的列,如下所示

@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`")` 
等等

但在这种情况下,表不是由hibernate创建的,这可能是由于语法错误。
但是,如果我创建的表只包含整数值,那么上面的表就创建好了。

下面的代码行可以正常工作

@Column(name = "cname", insertable=false, updatable = false, nullable = false, columnDefinition = "varchar(255) default '15-JUL-1980'") 

columnDefinition可以工作,但它依赖于数据库。
还有许多其他的解决方案(使用@PrePersist注释,修改“getters”),但我建议您在DBMS中设置默认值,然后在模型类中使用@DynamicInsert/@DynamicCupDate注释。

参见下面的示例(Spring数据JPA+Hibernate)

Hibernate将生成以下insert SQL语句

INSERT INTO person (age, name, phone, address)
VALUES (?, ?, ?, ?)
您也可以看到Hibernate插入不必要的列(电话、地址)

但是,在向模型类添加@DynamicInsert注释后,如下所示

@Entity
@DynamicInsert
public class Person {
    ...
}
您可以看到Hibernate只插入必要的列

INSERT INTO person (age, name)
VALUES (?, ?)

未初始化的列(电话、地址)通过DBMS默认值设置它们的值。

只需在Java代码中设置默认值,只需像这样初始化变量-
private int myColumn=100和字符串为

@Column(name="order_status" , length=10 )
private String orderStatus = "Pending";

这是我的工作!!我知道现在已经太晚了,但我希望这能帮助别人

用引号括起
1980年7月15日
,如
columnDefinition=“varchar(255)default'1980年7月15日”
。此外,这应该对你有所帮助:谢谢Alex和你的权利。实际上,我是通过修改实体类来更改现有表的,但在对现有表进行掺杂并让hibernate创建新表之后,它就开始工作了。在表删除和重新运行后,应用程序正在使用[@Column(name=“cname”,insertable=false,updateable=false,nullable=false,columnDefinition=“varchar(255)default‘15-JUL-1980’”)]很好。这仅适用于新表,但是否有任何想法将更改应用于现有表。对于现有表,新的插入/更新您可以直接在Java中设置默认值,如下所示
@Column(..,columnDefinition=“varchar(255)default'15-JUL-1980'”)私有字符串myVar=“15-JUL-1980”。当Hibernate创建一个新实例时,该变量已经设置了一个默认值。
@Column(name="order_status" , length=10 )
private String orderStatus = "Pending";