簡體   English   中英

使用MYSQL中的hibernate注釋設置默認值

[英]Set default values using hibernate annotations in MYSQL

我在互聯網上搜索並看到有關在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=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 / @ 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默認值設置其值。

只需在Java代碼中設置默認值,只需像這樣初始化變量 - private int myColumn = 100; 和字符串為

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

這對我有用!! 我知道現在為時已晚,但我希望這會對某人有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM