2011-11-27 10 views
18

Sto utilizzando EclipseLink 2.3.1 per modellare la tabella di autoriferimento con JPA 2. Ricevo strani avvisi da EclipseLink quando creo EntityManager.Impossibile capire l'avviso di EclipseLink

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

Non sono riuscito a trovare alcuna documentazione su questo avviso e non sono sicuro di cosa significhi. Voglio anche sapere come risolvere il problema che fa apparire questo avviso ...

Sono nuovo di JPA quindi potrebbe essere una cosa stupida. Il mio programma è davvero semplice. Ecco la definizione di entità:

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

Ecco il 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> 

Il codice che causa questo avvertimento:

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

Si noti che il EM risultante va bene e può essere usato (per esempio) per trovare elementi. Inoltre, posso attraversare il grafico delle entità - Posso trovare un'entità nel database e poi ottengo un'altra entità usando il campo redirectID.

risposta

20

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

Per il recupero lazy sulle associazioni XxxToOne, il codice byte delle entità JPA deve essere modificato (è ciò che significa tessere). Se non viene modificato, un'associazione XxxToOne può essere solo impotente.

Il caricamento eccessivo indica che ogni volta che si carica un Site dal database, viene caricato anche il suo redirectID. Con il recupero pigro, si carica un sito e il suo reindirizzamento viene caricato solo (pigramente) quando si chiama un metodo nel campo redirectID.

+0

Grazie! Per qualche motivo ho saltato questa risorsa. Controllerò. – gamliela

+3

Ho dovuto aggiungere -javaagent: eclipselink.jar alla riga di comando JVM per far funzionare la tessitura dinamica. Vedi http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Dynamic_Weaving – Nathan

Problemi correlati