Vraag Kan de EclipseLink-waarschuwing niet begrijpen


Ik gebruik EclipseLink 2.3.1 om zelfreferentietabellen te modelleren met JPA 2. Ik krijg een rare waarschuwing van EclipseLink wanneer ik de EntityManager aanmaak.

[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.

Ik kon geen documentatie over deze waarschuwing vinden en ik weet niet zeker wat dit betekent. Ik wil ook weten hoe ik het probleem kan oplossen waardoor deze waarschuwing verschijnt ...

Ik ben nieuw bij JPA dus het is misschien een gek ding. Mijn programma is heel eenvoudig. Hier is de definitie van de entiteit:

@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;
}

Hier is persistentie.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>

De code die deze waarschuwing veroorzaakt:

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

Merk op dat de resulterende EM prima is en kan worden gebruikt (bijvoorbeeld) om elementen te vinden. Ook kan ik de grafiek van entiteiten doorlopen - ik kan één entiteit in de database vinden en dan krijg ik een andere entiteit die het redirectID-veld gebruikt.


18
2017-11-27 12:52


oorsprong


antwoorden:


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

Om lui ophalen mogelijk te maken op XxxToOne-associaties, moet de bytecode van de PPO-entiteiten worden aangepast (dat is wat weven betekent). Als het niet wordt gewijzigd, kan een XxxToOne-associatie alleen gretig worden gezocht.

Eager halen betekent dat elke keer dat je een a laadt Site uit de database, zijn redirectID is ook geladen. Met lazy fetching laad je een site en wordt de omleiding alleen (lui) geladen als je een methode op de redirectID veld.


20
2017-11-27 13:50