3

私はインターネットで検索し、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`")` 

ただし、この場合、テーブルは休止状態によって作成されません。これは、構文が間違っている可能性があります。しかし、上記のテーブルが作成されるように、整数値のみでテーブルを作成している場合。

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 アノテーションを使用して「ゲッター」を変更する)、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 に答える