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
。
我的 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
。