【问题标题】:SpringData fetch wrong class by JPA inheritance using SINGLE_TABLESpring Data 使用 SINGLE_TABLE 通过 JPA 继承获取错误的类
【发布时间】:2014-04-18 09:30:02
【问题描述】:

Spring Data JPA 和使用单个表的 JPA 类层次结构有一个奇怪的行为。基本上我有两个实体 Vertrag 和 VertrieblerVertrag。 VertrieblerVertrag 扩展 Vertrag。鉴别器值是'vertragsart',对于 Vertrag 是'KV',对于 VertrieblerVertrag 是'VV'。不知何故,我得到了 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
{

}

和 fetch 调用

@Service
public class VertragService implements IVertragService
{

    @Autowired
    private VertragRepo vertragRepo;

    @Override
    public Vertrag getVertrag()
    {

        final Vertrag findOne = this.vertragRepo.findOne("V20141801/10001");

        return findOne;
    }
}

插入.sql

INSERT INTO `buch__vertrag` (`vertragnr`,vertragsart) VALUES ('V20141801/10001', 'VV');

【问题讨论】:

  • 您能否提供指向任何建议您永远不应覆盖 equals 和 hashcode 的文档的链接?

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


【解决方案1】:

我已经解决了。 我的错。

我忘记在persistence.xml中插入子类“VertrieblerVertrag”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多