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