Подтвердить что ты не робот

Невозможно понять предупреждение EclipseLink

Я использую EclipseLink 2.3.1 для моделирования таблицы саморегуляции с JPA 2. Я получаю странное предупреждение от EclipseLink, когда создаю EntityManager.

[EL Warning]: 2011-11-27 14:28:00.91--ServerSession(8573456)--Reverting the lazy setting on the OneToOne or ManyToOne attribute [redirectID] for the entity class [class lp.db.model.Site] since weaving was not enabled or did not occur.

Я не мог найти документацию об этом предупреждении, и я не уверен, что это значит. Я также хочу знать, как решить проблему, которая заставляет это предупреждение появляться...

Я новичок в JPA, так что это может быть глупо. Моя программа очень проста. Вот определение сущности:

@Entity
@Table(name="site") 
public class Site implements Serializable {

private static final long serialVersionUID = 1L;

    @Id
    @Column(name="site_id")
    public String siteID;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="redirect_id", referencedColumnName="site_id")
    public Site redirectID;

    @Column(name="name")
    public String name;
}

Вот файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="lpdb2" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>lp.db.model.Site</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/lpdb2"/>
            <property name="javax.persistence.jdbc.user" value="blabla"/>
        </properties>
    </persistence-unit>
</persistence>

Код, вызывающий это предупреждение:

Persistence.createEntityManagerFactory("lpdb2").createEntityManager();

Обратите внимание, что полученный EM является точным и может использоваться (например) для поиска элементов. Кроме того, я могу пересекать график сущностей - я могу найти один объект в базе данных, а затем получить другой объект, используя поле redirectID.

4b9b3361

Ответ 1

См. http://wiki.eclipse.org/Introduction_to_EclipseLink_Application_Development_%28ELUG%29#Using_Weaving.

Для ленивой выборки в XxxToOne-ассоциациях байт-код объектов JPA должен быть изменен (что означает то, что имеет значение). Если он не изменен, ассоциация XxxToOne может быть только желательной.

Нежелательная выборка означает, что каждый раз, когда вы загружаете Site из базы данных, ее redirectID также загружается. При ленивом извлечении вы загружаете сайт, и его перенаправление загружается (лениво) только при вызове метода в поле redirectID.