2011-11-27 21 views
18

JPR 2 ile kendi kendini referanslama tablosunu modellemek için EclipseLink 2.3.1 kullanıyorum. EntityManager'ı oluşturduğumda EclipseLink'ten garip bir uyarı alıyorum.EclipseLink uyarısı bilinmiyor

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

Bu uyarı hakkında herhangi bir belge bulamadım ve ne anlama geldiğinden emin değilim. Ayrıca, bu uyarının görünmesine neden olan sorunun nasıl çözüleceğini de bilmek istiyorum ...

JPA'ya yeni geliyorum, bu yüzden aptalca bir şey olabilir. Programım gerçekten çok basit. İşte

@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 edilir: Burada varlık tanımıdır

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

bu uyarıyı neden kodu: Ortaya çıkan EM gayet iyi ve can olduğunu

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

Not öğeleri bulmak için (örneğin) kullanılabilir. Ayrıca, varlıkların grafiğini de geçebilirim - veri tabanında bir varlık bulabilir ve sonra redirectID alanını kullanarak başka bir varlık elde edebilirim.

cevap

20

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

XxxToOne derneklerinde tembel getirme için, JPA öğelerinin bayt kodu değiştirilmelidir (dokuma aracı budur). Değiştirilmediyse, bir XxxToOne ilişkisi yalnızca istekle getirilebilir.

Eager getirme, her Site veritabanından yüklediğinizde, redirectID da yüklenir. Tembel getirme ile bir site yüklersiniz ve yönlendirme yalnızca redirectID alanında bir yöntem çağırdığınızda yüklenir (tembel).

+0

Teşekkürler! Bir sebepten dolayı bu kaynağı atladım. Kontrol edeceğim. – gamliela

+3

Çalışmak için dinamik dokuma elde etmek için JVM komut satırına -javaagent: eclipselink.jar eklemek zorunda kaldım. Http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Dynamic_Weaving sayfasına bakın. – Nathan