jpa - multiple - jpql query
No puedo entender la advertencia de EclipseLink (1)
Consulte http://wiki.eclipse.org/Introduction_to_EclipseLink_Application_Development_%28ELUG%29#Using_Weaving .
Para que la recuperación perezosa sea posible en las asociaciones XxxToOne, se debe modificar el código de bytes de las entidades JPA (eso es lo que significa tejer). Si no se modifica, una asociación XxxToOne solo se puede recuperar.
La búsqueda ansiosa significa que cada vez que carga un Site
desde la base de datos, también se carga su redirectID
. Con la recuperación perezosa, usted carga un sitio, y su redireccionamiento solo se carga (perezosamente) cuando llama a un método en el campo redirectID
.
Estoy usando EclipseLink 2.3.1 para modelar la tabla de auto referencia con JPA 2. Recibo una advertencia extraña de EclipseLink cuando creo el 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.
No pude encontrar ninguna documentación sobre esta advertencia, y no estoy seguro de lo que significa. También quiero saber cómo resolver el problema que hace que aparezca esta advertencia ...
Soy nuevo en JPA por lo que podría ser una tontería. Mi programa es muy simple. Aquí está la definición de la entidad:
@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;
}
Aquí está el 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>
El código que provoca esta advertencia:
Persistence.createEntityManagerFactory("lpdb2").createEntityManager();
Tenga en cuenta que el EM resultante está bien y se puede usar (por ejemplo) para encontrar elementos. Además, puedo atravesar el gráfico de entidades: puedo encontrar una entidad en la base de datos y luego obtener otra entidad mediante el campo redirectID.