持久化对象时,JPA会错过字段

时间:2011-12-22 05:51:50

标签: java mysql jpa eclipselink

首先,对于长篇文章的批评,我试图尽可能地减少它。

我正在尝试使用JPA持久化对象。虽然大多数对象字段都保持良好,但完全跳过一个,但没有错误。

简而言之,我试图坚持ListedItemDetail的实例。遗憾的是,BidCollection字段被完全忽略,并且数据库中没有它的痕迹。我不知道为什么......

我已经包含了相关来源。源是从第三方架构生成的。我正在使用orm.xml进行JPA映射,并且下面也包含了reavent位。

public class ListedItemDetail  extends Item implements Serializable{
    protected BidCollection bids;
}

public class Item extends ExtensibleDataObject implements Serializable {
    protected int listingId;
}

public class BidCollection extends PagedCollectionOfBidte0R55Be implements
Serializable{
    private final static long serialVersionUID = 1L;
}

public class PagedCollectionOfBidte0R55Be implements Serializable {
    private final static long serialVersionUID = 1L;
    protected Integer totalCount;
    protected Integer page;
    protected Integer pageSize;
    protected InnerCollectionOfBidte0R55Be list;
}

public class InnerCollectionOfBidte0R55Be implements Serializable {
    private final static long serialVersionUID = 1L;
    protected List<Bid> bid;
}

public class Bid extends ExtensibleDataObject implements Serializable {
    private final static long serialVersionUID = 1L;
    protected String account;
    protected Boolean isByMobile;
    protected Boolean isByProxy;
    protected Timestamp bidDate;
    protected Boolean isBuyNow;
    protected Member bidder;
}

orm.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.0">
<entity class="nz.co.trademe.api.v1.ListedItemDetail">
    <attributes>
         <cascade>
             <cascade-persist/>
         </cascade>
        <embedded name="bids">
        </embedded>
    </attributes>
</entity>

<entity class="nz.co.trademe.api.v1.Item">
    <inheritance strategy="JOINED"/>
    <discriminator-column discriminator-type="STRING"/>
    <attributes>
        <id name="listingId">
        </id>
    </attributes>
</entity>


<embeddable class="nz.co.trademe.api.v1.PagedCollectionOfBidte0R55Be">
</embeddable>

<embeddable class="nz.co.trademe.api.v1.InnerCollectionOfBidte0R55Be">
    <attributes>
        <element-collection name="bid">
        </element-collection>
    </attributes>
</embeddable>

<embeddable class="nz.co.trademe.api.v1.Bid">
</embeddable>

<embeddable class="nz.co.trademe.api.v1.BidCollection">
</embeddable>
</entity-mappings>

1 个答案:

答案 0 :(得分:3)

该问题与BidCollection可嵌入和使用继承有关。 JPA不支持使用embeddables继承。

从技术上讲,EclipseLink支持使用embeddables继承,但目前不支持JPA注释。

您可以删除继承,也可以尝试使用DescriptorCustomizer设置继承。

您的模型似乎也很复杂,您可能想重新考虑它。