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

时间:2012-10-25 14:20:25

标签: java hibernate

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

@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属性: -

`length=100, columnDefinition = "CHAR default `15JUL1980`")` 

但是在这种情况下,表不是由hibernate创建的,这可能是由于语法错误造成的。 但是,如果我创建的表只包含整数值,则会创建表。

3 个答案:

答案 0 :(得分:11)

下面的代码行正常工作

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

答案 1 :(得分: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默认值设置其值。

答案 2 :(得分:0)

只需在Java代码中设置默认值,就可以像这样初始化变量-private int myColumn = 100;和String

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

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