【发布时间】:2017-09-20 10:49:13
【问题描述】:
我有一个应用程序,它使用传入的消息,解析消息中存在的数据,然后将规则应用于该数据。在 Rule 实体上,有一列用于区分规则的type。
我想将规则的结果持久化到分隔表或子类,具体取决于规则的类型 strong> 处理它们。
我目前正在通过创建父 @MappedSuperclass(抽象)BaseResult 对象以及 AppleResult 和 OrangeResult @Enitiy 来解决这个问题扩展了 BaseResult。
我的问题是,鉴于下面的陈述,我如何改进/注释模型中的对象,以便在访问/持久化时不必为每个实例进行 instanceof 检查?现在这是我必须做的,以避免“baseresult 不存在”SQL 语法异常:
public void save(BaseResult baseResult) {
if (baseResult instanceof AppleResult) {
jpaApi.em().merge((AppleResult) baseResult);
} else if (baseResult instanceof OrangeResult) {
jpaApi.em().merge((OrangeResult) baseResult);
}
}
我希望有一个比必须执行 if/else 并根据结果显式转换更优雅的解决方案。我正在考虑使用诸如 @DiscriminatorValue 注释之类的东西来使用泛型,但这些似乎都要求在我的情况下 BaseResult 也是一个实体,但事实并非如此。
【问题讨论】:
标签: java hibernate jpa data-modeling multi-table-inheritance