2012-12-12 80 views
2

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

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

回答

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; 
} 

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