2017-08-06 24 views
2

SINGLE_TAB継承のHibernate設定で、@DiscriminatorColumnが無視され、クエリが常に 'dtype'列にデフォルト設定されているような奇妙な状況があります。アノテーションをまったく含めなかったときの動作(デフォルトのカラム名は 'dtype')と似ています。常にdtypeを使用しているHibernate

基本エンティティ:

@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 

} 

Iは、各オブジェクト(postTypeフィールド)内のディスクリミネータ値自体へのアクセスを必要とします。それが原因ではないように私はそれを削除しても、私はまだ同じ動作をしています。

私はJPAリポジトリを通じてサブクラスでクエリを実行しよう:

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

Hibernateはクエリを生成します。

'DTYPEは'」doesnのようもちろん、エラーが発生し
select post0_.id as id2_4_, post0_.bodyl as body_bod3_4_, post0_.title as title12_4_ 
from post post0_ 
where post0_.dtype='EVENT' 

テーブルには存在しません。

奇妙なことは、Postエンティティで@DiscriminatorFormula( "post_type")を使用すると、すべてが機能しているようです。しかし、私は@DiscriminatorColumnを私のニーズに正確に適合させるために使用する方が好きです。

私はHibernate 5.2.10-FINALとSpring Data JPA 1.11.4を使用しています。

これを引き起こす可能性のあるアイデアはありますか?

答えて

2

@DiscriminatorColumnの間違ったパラメータを指定したため、この問題が発生していると思われます。columnDefinitionの代わりにnameを使用してください。

関連する問題