I've got a strange behaviour with Spring Data JPA and JPA class hierarchy using a single table. Basically I have two entities Vertrag and VertrieblerVertrag. VertrieblerVertrag extend Vertrag. The discriminator value is 'vertragsart' and it is 'KV' for Vertrag and 'VV' for VertrieblerVertrag. Somehow I get Objects of type Vertrag where the discriminator value is set to 'VV'! VertragService.getVertrag();
what am I doing wrong?
Vertrag.java
@javax.persistence.Entity
@Table(name = "buch__vertrag")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vertragsart", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("KV")
public class Vertrag implements Serializable
{
/**
* z.B. Vyyyymmdd/kundenr
*
*/
@Id
@javax.persistence.Column(nullable = false, name = "vertragnr")
protected String vertragNr;
public List<Rechnung> rechnungErstellen(final Date von, final Date bis)
{
. . .
}
}
and VertrieblerVertrag.java
@javax.persistence.Entity
@DiscriminatorValue("VV")
public class VertrieblerVertrag extends Vertrag
{
@Override
public List<Rechnung> rechnungenAusstellen()
{
throw new UnsupportedOperationException();
}
}
VertragRepo.java
public interface VertragRepo extends YBRepository<Vertrag, String>
{
}
YBRepository.java
@NoRepositoryBean
public interface YBRepository<T,PK extends Serializable> extends PagingAndSortingRepository<T, PK>, JpaSpecificationExecutor
{
}
and the fetch call
@Service
public class VertragService implements IVertragService
{
@Autowired
private VertragRepo vertragRepo;
@Override
public Vertrag getVertrag()
{
final Vertrag findOne = this.vertragRepo.findOne("V20141801/10001");
return findOne;
}
}
insert.sql
INSERT INTO `buch__vertrag` (`vertragnr`,vertragsart) VALUES ('V20141801/10001', 'VV');
I have solved it. My mistake.
I forgot to insert the sub-class "VertrieblerVertrag" in persistence.xml