我想知道在hibernate中是否有一种方法可以将我的应用程序中的一个属性映射到非空列,或者合并我映射的表中的两列。
例如,MyTable包含TypeA和TypeB列。表中存在约束,其中这两列中的一列必须为非null。我想将名为MyType的hibernate属性映射到nonnull列。这样做的原因是我想在休眠级别管理它,而不是在我的应用程序中添加检查来决定是否要将TypeA或TypeB用作MyType。
答案 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;
}
第二种方法依赖于数据库。所以要谨慎使用它。