JPA пропускает поле при сохранении объекта - PullRequest
0 голосов
/ 22 декабря 2011

Во-первых, извинения за длинный пост, я пытался сократить его как можно больше.

Я пытаюсь сохранить объект, используя JPA.Несмотря на то, что большинство полей объектов сохраняются нормально, одно полностью пропускается, но не выдается никаких ошибок.

Короче, я пытаюсь сохранить экземпляр ListedItemDetail.К сожалению, поле BidCollection полностью игнорируется, и его нет в базе данных.Понятия не имею, почему ..

Я включил соответствующий источник.Источник был сгенерирован из сторонней схемы.Я использую orm.xml для сопоставления JPA и включил приведенные ниже биты ниже.

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 Ответ

3 голосов
/ 22 декабря 2011

Проблема связана с тем, что BidCollection является встраиваемым и использует наследование. JPA не поддерживает наследование встраиваемыми объектами.

Технически EclipseLink поддерживает наследование с помощью встраиваемых объектов, но не в настоящее время с помощью аннотаций JPA.

Вы можете удалить наследство или попытаться настроить наследование с помощью DescriptorCustomizer.

Ваша модель также выглядит очень запутанной, вы можете переосмыслить ее.

...