2011-11-27 13 views
18

Używam EclipseLink 2.3.1 do modelowania tabeli samoindeksowania za pomocą JPA 2. Otrzymuję dziwne ostrzeżenie od EclipseLink podczas tworzenia EntityManager.Nie można zrozumieć ostrzeżenia 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. 

Nie mogłem znaleźć żadnej dokumentacji dotyczącej tego ostrzeżenia i nie jestem pewien co to oznacza. Chcę również wiedzieć, jak rozwiązać problem, który powoduje pojawianie się tego ostrzeżenia ...

Jestem nowy w JPA, więc może to być głupie. Mój program jest naprawdę prosty. Oto definicja podmiotu:

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

Oto 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> 

Kod, który powoduje to ostrzeżenie:

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

pamiętać, że otrzymaną EM jest w porządku i może być używane (na przykład) do znajdowania elementów. Mogę również przechodzić przez wykres podmiotów - mogę znaleźć jedną jednostkę w bazie danych, a następnie otrzymuję inny podmiot za pomocą pola redirectID.

Odpowiedz

20

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

Aby leniwy sposób pobierania był możliwy na skojarzeniach XxxToOne, kod bajtu jednostek JPA musi zostać zmodyfikowany (to znaczy, co oznacza tkactwo). Jeśli nie jest zmodyfikowany, skojarzenie XxxToOne może być tylko pobudzone.

Chętne pobieranie oznacza, że ​​za każdym razem, gdy ładujesz plik Site z bazy danych, jego numer redirectID jest również ładowany. W przypadku leniwego pobierania, ładujesz witrynę, a jej przekierowanie jest ładowane (leniwie), gdy wywołujesz metodę w polu redirectID.

+0

Dzięki! Z jakiegoś powodu pominąłem ten zasób. Sprawdzę to. – gamliela

+3

Musiałem dodać -javaagent: eclipselink.jar do linii komend JVM, aby uzyskać dynamiczne tkanie do pracy. Zobacz http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Dynamic_Weaving – Nathan

Powiązane problemy