2

J'ai une situation étrange dans mon Hibernate config SINGLE_TAB héritage par lequel le @DiscriminatorColumn semble être ignoré et la requête est toujours par défaut à la colonne 'dtype'. C'est comme le comportement que je verrais quand je n'avais pas du tout inclus l'annotation (le nom de la colonne par défaut étant 'dtype').Hibernate ignorant la colonne discriminante - utilisant toujours 'dtype'

entité de base:

@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 
} 

entité de Sous-classe:

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

    // ommitted basic methods, no extra config 

} 

I doivent aussi avoir accès à la valeur de discriminateur elle-même au sein de chaque objet (le champ de postType). J'ai toujours le même comportement même si je l'enlève donc ça ne semble pas être la cause.

Lorsque je tente de faire une requête sur la sous-classe par un référentiel JPA:

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

Hibernate génère la requête:

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

qui bien sûr génère une erreur comme « DTYPE » n » t existe dans le tableau.

La chose étrange est que si j'utilise @DiscriminatorFormula ("post_type") sur l'entité Post à la place, tout semble fonctionner. Il est cependant plus lent donc je préférerais utiliser le @DiscriminatorColumn car il devrait correspondre exactement à mes besoins. J'utilise Hibernate 5.2.10-FINAL et Spring Data JPA 1.11.4 (ou généralement le tout dernier de tout ce que j'espère).

Des idées sur ce qui pourrait causer cela?

Répondre

2

Je pense que vous avez ce problème parce que vous avez spécifié un mauvais paramètre de @DiscriminatorColumn anotation, vous devez utiliser name au lieu de columnDefinition.