Reputation: 21
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
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