Hibernate Mapping:合并两列

时间:2012-12-12 22:48:46

标签: hibernate hibernate-mapping

我想知道在hibernate中是否有一种方法可以将我的应用程序中的一个属性映射到非空列,或者合并我映射的表中的两列。

例如,MyTable包含TypeA和TypeB列。表中存在约束,其中这两列中的一列必须为非null。我想将名为MyType的hibernate属性映射到nonnull列。这样做的原因是我想在休眠级别管理它,而不是在我的应用程序中添加检查来决定是否要将TypeA或TypeB用作MyType。

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

<强> 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)来获取typeA或typeB,具体取决于空标准

<强> 2。使用@Formula<formula> 或者您可以使用@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;
}

第二种方法依赖于数据库。所以要谨慎使用它。