3

我在互联网上搜索并看到了关于在 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`")` 

等等

但在这种情况下,表不是由休眠创建的,这可能是由于语法错误。但是,如果我创建只有整数值的表,则创建上表。

4

3 回答 3

13

下面的代码行工作正常

@Column(name = "cname", insertable=false, updatable = false, nullable = false, columnDefinition = "varchar(255) default '15-JUL-1980'") 
于 2013-01-03T09:38:29.907 回答
0

columnDefinition 是有效的,但它依赖于数据库。
还有很多其他解决方案(使用@PrePersist 注释,修改'getters'),但我建议你在DBMS 中设置默认值,然后在模型类中使用@DynamicInsert/@DynamicUpdate 注释。

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

// Model class
@Entity
public class Person {
    private Integer age;
    private String name;
    private String phone;
    private String address;

    // setters and getters
}

// Insert method in service class
@Override
@Transactional
public Person create() {
    Person createdPerson = new Person();

    createdPerson.setAge(20);
    createdPerson.setName("Foo");
    //createdPerson.setPhone("Unknown");
    //createdPerson.setAddress("Somewhere");

    return personRepository.save(createdPerson);
}

Hibernate 将生成以下插入 SQL 语句。

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

您也可以看到 Hibernate 插入了不必要的列(电话、地址)。

但是,在将 @DynamicInsert 注释添加到 Model 类之后,如下所示,

@Entity
@DynamicInsert
public class Person {
    ...
}

你可以看到 Hibernate 只插入必要的列。

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

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

于 2015-01-07T12:49:33.583 回答
0

只需在您的 Java 代码中设置默认值,只需像这样初始化您的变量 -private int myColumn = 100;并将 String 设置为

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

这对我有用!我知道为时已晚,但我希望这会对某人有所帮助!

于 2019-06-03T06:34:06.057 回答