当休眠状态已经知道目标类型时,为什么休眠搜索它呢?

时间:2019-10-31 05:29:35

标签: hibernate jpa

我在休眠应用程序中正在研究几个类(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!

不应要求歧视者做出决定,对吧?

1 个答案:

答案 0 :(得分:0)

如果您正在使用SINGLE_TABLE策略(或仅使用@Inheritance而未指定策略,即回退到默认的-simple table-),则鉴别符列为 REQUIRED < / strong>,具体参见this link上的JPA规范第2.12节。

虽然可以在某些JPA实现中加载实体而无需指定区分符列,但这不能保证跨JPA实现的可移植性。