Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top