JPA xml mapping не находит поля - PullRequest
1 голос
/ 10 февраля 2012

У меня есть следующий класс:

package lt.vic.valdos.domain.valda;

public class Valda implements java.io.Serializable {
    private long id;
    private Long valdosKodas;

    public long getId() {
        return id;
    }

    public Long getValdosKodas() {
        return valdosKodas;
    }
}

и следующий файл orm.xml:

<?xml version="1.0"?>
<entity-mappings
        xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_1.xsd"
        version="2.1">
    <entity class="lt.vic.valdos.domain.valda.Valda">
        <table name="VALDOS" schema="VLD" />
        <attributes>
            <id name="id" />
            <basic name="id">
                <column name="vld_id" />
                <return-insert return-only="true" />
            </basic>
            <basic name="valdosKodas">
                <column name="valdos_kodas" />
            </basic>
        </attributes>
    </entity>
</entity-mappings>

Когда я внедряю это в glassfish, я получаю следующую ошибку:

Exception [EclipseLink-7215] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Could not load the field named [id] on the class [class lt.vic.valdos.domain.valda.Valda]. Ensure there is a corresponding field with that name defined on the class.

Класс находится в банке, которая включена в веб-приложение как зависимость maven. Файл orm.xml находится в / WEB-INF / classes / META-INF веб-приложения.

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Понял это сам.По какой-то причине EclipseLink требует установки класса.Как только я добавляю приватные сеттеры, все выглядит нормально.Зачем нужны сеттеры (для сопоставления по умолчанию следует использовать FIELD), остается загадкой, но это не так важно для меняДобавление access = "FIELD" ко всем атрибутам сущности также устраняет проблему без установщиков.

1 голос
/ 10 февраля 2012

Вы должны указать идентификатор, сгенерированный с использованием стратегии IDENTITY:

<id name="id">
    <column name="vld_id"/>
    <generated-value strategy="IDENTITY"/>
</id>

Эта стратегия автоматически считывает предоставленный идентификатором базы данных обратно в новый объект при успешной фиксации.Функциональность оператора возврата EclipseLink применима только к базовым сопоставлениям, поскольку идентификатор уже покрыт генерацией идентификатора.

0 голосов
/ 10 февраля 2012

Я думаю, вам нужно добавить описание столбца для столбца id в ваш элемент id вместо использования дополнительного элемента basic .Как и в <id name="id"> <column name="vld_id" /> ... </id>, без дополнительных <basic name="id"> ....

Из моего собственного опыта (некоторое время назад), вероятно, проще использовать аннотации для определения ваших отображений.

...