我在休眠应用程序中正在研究几个类(Foo和Moo)。这两个类都扩展了Bar。
Foo --- extends ---> Bar
Moo --- extends ---> Bar
Foo和Moo和Bar在各个方面都是相同的,除了Foo和Moo各自实现了不同的标记界面。
换句话说,Foo实现IFoo并扩展Bar。 Moo实现了IMoo并扩展了Bar。但是,IFoo或IMoo界面都没有为图片引入任何新方法,因为它们只是标记界面。
此外,我还有几个JPA存储库类。
@Repository
public class FooRepository extends JpaRepository<Foo, Long> {
public Foo findFooById(id);
}
和
@Repository
public class MooRepository extends JpaRepository<Moo, Long> {
public Moo findMooById(id);
}
问题:
当我调用findMooById时,出现错误:
org.database.util.DatabaseException:错误:列bla.dtype不存在 存在。
我知道这是因为休眠状态正在搜索区分列。
问题
我的问题是,为什么冬眠搜索一个区分列?
每个存储库的返回类型已经指定了Moo或Foo返回类型。如果愿意,Moo存储库将无法返回Foo!
不应要求歧视者做出决定,对吧?
答案 0 :(得分:0)
如果您正在使用SINGLE_TABLE策略(或仅使用@Inheritance
而未指定策略,即回退到默认的-simple table-),则鉴别符列为 REQUIRED < / strong>,具体参见this link上的JPA规范第2.12节。
虽然可以在某些JPA实现中加载实体而无需指定区分符列,但这不能保证跨JPA实现的可移植性。