2

アプリケーションの 1 つのプロパティを null 以外の列にマップする方法、またはマップしているテーブルの 2 つの列を結合する方法が hibernate にあるかどうかを知りたいです。

たとえば、MyTable には列 TypeA と TypeB が含まれています。これらの 2 つの列のいずれかが非 null でなければならないというテーブルの制約があります。MyType という休止状態のプロパティを null 以外の列にマップしたいと考えています。これは、MyType として TypeA または TypeB を使用するかどうかを決定するためにアプリケーション全体にチェックを追加するのではなく、休止状態レベルでこれを管理したいためです。

4

1 に答える 1

0

これには 2 つの方法があります。

1. カスタム プロパティの使用

@Entity
public class MyTable {
    @Column
    private String typeA;

    @Column
    private String typeB;

    public getType() {
        return (null == typeA) ? typeB : typeA;
    }

    //typeA, typeB getter setters
}

そしてtype、アプリケーション全体で (getType) を使用して、null 基準に応じて typeA または typeB を取得できます。

2.@Formulaまたは<formula> Or を使用すると、@Formula ( 5.1.4.1.5. Formula ) を使用して、typeA および typeB の値に基づいて新しい派生列を定義できます。

@Entity
public class MyTable {
    @Column
    private String typeA;

    @Column
    private String typeB;


    @Formula(case typeA when null then typeB else typeA) //Oracle only
    private String type;
}

2 番目のアプローチは、データベースに依存します。したがって、注意して使用してください。

于 2012-12-13T09:38:10.470 に答える