web-dev-qa-db-ja.com

Hibernateでアノテーションを使用してデフォルトの列値を定義する

SOとネット上にもこれらの質問がたくさんあることは知っていますが、すべての回答は、データベース固有であり、私が作業しているシステムであるため私には適用できないcolumnDefinitionの使用を提案しています異なるデータベースで実行する必要があります。

私はこれを発見しました 休止状態の問題 誰かが注釈のためにこの機能を要求しました。この問題は 別の問題 がその機能をカバーすると言って終了しました。 2番目の問題により、注釈_@Generated_およびその他の注釈が追加されたようですが、これらの新しい注釈を使用してデフォルトの列値を定義する方法に関するドキュメントは見つかりませんでした。

だから私の質問は:アノテーションでデフォルトの列値を定義する方法を知っている人はいますか(そしてcolumnDefinitionを使用しないでください)?

編集:問題をさらに明確にする:新しい非null列を追加する場合、既存のスキーマを更新するためにHibernateが必要です(新しい列をそれぞれの表)。ただし、列がnullではないため、データベースはデフォルト値を指定しないと列を作成できません(テーブルにすでにいくつかの行がある場合)。そのため、HibernateにALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'を発行するように指示する必要がありますが、使用するデータベースとは独立している必要があります。

10
Jardo

Java docsは説明が必要なドキュメントです。正しく理解できれば、フィールドのデフォルト値を設定する方法が必要です。もしそうであれば、以下を参照してください。コードスニペット。

@Entity
@Table(name = "my_entity")
public class SomeEntity extends BaseEntity {

public static final class MyValueGenerator implements
        ValueGenerator<String> {
    @Override
    public String generateValue(Session session, Object owner) {
        return "This is my default name";
    }
}

@Basic
@Column(name = "name", insertable = true, updatable = true, nullable = false, length = 255)
// This will add a DDL default
@ColumnDefault("'This is my default name'")
// This will add a runtime default.
@GeneratorType(type = MyValueGenerator.class)
private String name;

// getters and setters

}
15
Babl

以下は私のために働いています。

@ColumnDefault( "'0.0'")

@Column(name = "avgRating")

プライベートフロートavgRating;

7
ArunDhwaj IIITH