Spring Data使用SINGLE_TABLE通过JPA继承获取错误的类

时间:2014-04-18 09:30:03

标签: spring inheritance jpa spring-data single-table-inheritance

我使用单个表在Spring Data JPA和JPA类层次结构中遇到了奇怪的行为。基本上我有两个实体Vertrag和VertrieblerVertrag。 VertrieblerVertrag扩展了Vertrag。鉴别器值是< vertragsart'它是' KV'对于Vertrag和' VV'对于VertrieblerVertrag。不知怎的,我得到Vertrag类型的对象,其中鉴别器值被设置为' VV'! VertragService.getVertrag();

我做错了什么?

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)
    {
        . . . 
    }
 } 

和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
{

}

和提取电话

@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');

1 个答案:

答案 0 :(得分:0)

我已经解决了。 我的错。

我忘了插入子类&#34; VertrieblerVertrag&#34;在persistence.xml中