无法理解EclipseLink警告 [英] Can't understand EclipseLink warning
问题描述
我正在使用EclipseLink 2.3.1使用JPA 2对自引用表进行建模. 创建EntityManager时,我从EclipseLink收到奇怪的警告.
I'm using EclipseLink 2.3.1 to model self referencing table with JPA 2. I get weird warning from EclipseLink when I create the 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.
我找不到有关此警告的任何文档,并且不确定其含义. 我还想知道如何解决导致此警告出现的问题...
I couldn't find any documentation about this warning, and I'm not sure what it means. I also want to know how to solve the problem that causes this warning to appear...
我是JPA的新手,所以这可能很愚蠢. 我的程序真的很简单.这是实体定义:
I'm new to JPA so it might be a silly thing. My program is really simple. Here is the entity definition:
@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:
Here is the 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>
导致此警告的代码:
Persistence.createEntityManagerFactory("lpdb2").createEntityManager();
请注意,生成的EM很好,可以用于(例如)查找元素. 另外,我可以遍历实体图-我可以在数据库中找到一个实体,然后使用redirectID字段获得另一个实体.
Note that the resulting EM is fine and can be used (for example) to find elements. Also, I can traverse the graph of entities - I can find one entity in the database and then I get another entity using the redirectID field.
推荐答案
要使XxxToOne关联上的延迟获取成为可能,必须修改JPA实体的字节码(这就是编织的意思).如果未修改,则只能预先获取XxxToOne关联.
For lazy fetching to be possible on XxxToOne associations, the byte-code of the JPA entities must be modified (that's what weaving means). If it's not modified, an XxxToOne association can only be eager-fetched.
热切获取意味着每次从数据库加载Site
时,也会同时加载其redirectID
.通过延迟获取,您可以加载网站,并且仅当您在redirectID
字段上调用方法时才(延迟)加载网站的重定向.
Eager fetching means that each time you load a Site
from the database, its redirectID
is also loaded. With lazy fetching, you load a site, and its redirect is only loaded (lazily) when you call a method on the redirectID
field.
这篇关于无法理解EclipseLink警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!