Hibernate 忽略鉴别器列 - 总是使用 'dtype'

Hibernate ignoring discriminator column - always using 'dtype'

我的 SINGLE_TAB 继承 Hibernate 配置中有一个奇怪的情况,其中 @DiscriminatorColumn 似乎被忽略并且查询总是默认返回到 'dtype' 列。这就像我根本没有包含注释时看到的行为(默认列名是 'dtype')。

基础实体:

@Entity
@Table(name = "post")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(columnDefinition = "post_type", discriminatorType = DiscriminatorType.STRING)
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "title")
    private String title;

    @Column(name = "body")
    private String body;

    @NotNull
    @Column(name = "post_type", insertable = false, updatable = false)
    private String postType;

    // other simple columns



    // ommit getters/setters + hashcode etc
}

子类实体:

@Entity
@DiscriminatorValue(value = "EVENT")
public class Event extends Post {

    // ommitted basic methods, no extra config

}

我还需要访问每个对象(postType 字段)中的鉴别器值本身。即使我删除它,我仍然有相同的行为,所以它似乎不是原因。

当我尝试通过 JPA 存储库对子类进行查询时:

public interface EventRepository extends JpaRepository<Event, Integer> {
    List<Event> findAll();
}

Hibernate 生成查询:

select post0_.id as id2_4_, post0_.bodyl as body_bod3_4_, post0_.title as title12_4_ 
from post post0_ 
where post0_.dtype='EVENT'

这当然会产生错误,因为 'dtype' 在 table 中不存在。

奇怪的是,如果我在 Post 实体上使用 @DiscriminatorFormula("post_type") ,似乎一切正常。但是它比较慢,所以我更愿意使用 @DiscriminatorColumn,因为它应该完全符合我的需要。

我正在使用 Hibernate 5.2.10-FINAL 和 Spring Data JPA 1.11.4(或者通常是最新的,希望一切都是最新的)。

关于可能导致此问题的原因有什么想法吗?

我认为你有这个问题是因为你指定了错误的 @DiscriminatorColumn 注释参数,你应该使用 name 而不是 columnDefinition