Totozorus
Totozorus

Reputation: 21

@DiscriminatorColumn/@DiscriminatorValue is not working

I have this class:

@Entity
@Table(name = "FOO")
@DiscriminatorColumn(name="IS_FOO_OR_BAR", discriminatorType = DiscriminatorType.CHAR)
@DiscriminatorValue("FOO")
public final class FOO {
  ...
}

But when I use findAll() with Spring Data JPA, the results contains foo and bar values in the discriminant.

I also tried to create an abstract parent class, with @MappedSuperclass but same result.

What am I doing wrong?

I am working with Spring Data JPA, JPA 2.1, Hibernate 5.1.0, and I tried my request in H2Database and in Oracle.

Edit (The sql invoked by jpa provider):

select FOO.* FROM FOO

It's like i am missing a where condition.

Edit 2 :

I added the @DiscriminatorOptions(force = true) and now it works. But when i try to use an abstract class it's not working. The where condition is absent...

pojo :

@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="IF_FOO_OR_BAR", discriminatorType = DiscriminatorType.CHAR,columnDefinition = "char(1) default 'N'")
@DiscriminatorOptions(force = true)
public abstract class AbstractFoo {
    ....
}


@Entity
@Table(name = "FOO")
@DiscriminatorValue("FOO")
public final class Foo extends AbstractFoo {
  ...
}


@Entity
@Table(name = "FOO")
@DiscriminatorValue("BAR")
public final class Bar extends AbstractFoo {
  ...
}

Upvotes: 2

Views: 3095

Answers (1)

Florian Campa
Florian Campa

Reputation: 21

Add @DiscriminatorOptions(force = true) in your main entity.

@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="IF_FOO_OR_BAR", discriminatorType = DiscriminatorType.CHAR,columnDefinition = "char(1) default 'N'")
@DiscriminatorOptions(force = true)
public abstract class AbstractFoo {
    ....
}

Upvotes: 0

Related Questions