【问题标题】:Hibernate Mapping: coalesce two columns休眠映射:合并两列
【发布时间】:2012-12-12 22:48:45
【问题描述】:
我想知道在休眠中是否有一种方法可以将我的应用程序中的一个属性映射到非空列或合并我正在映射的表中的两列。
例如,MyTable 包含列 TypeA 和 TypeB。表上有一个约束,其中这两列之一必须为非空。我想将名为 MyType 的休眠属性映射到非空列。这样做的原因是我想在休眠级别进行管理,而不是在我的应用程序中添加检查来决定是使用 TypeA 还是 TypeB 作为 MyType。
【问题讨论】:
标签:
hibernate
hibernate-mapping
【解决方案1】:
有两种方法:
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>
或者您可以使用@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;
}
第二种方法是依赖于数据库的。所以请谨慎使用。