无法理解 EclipseLink 警告

Posted

技术标签:

【中文标题】无法理解 EclipseLink 警告【英文标题】:Can't understand EclipseLink warning 【发布时间】:2012-01-07 07:29:56 【问题描述】:

我正在使用 EclipseLink 2.3.1 使用 JPA 2 对自引用表进行建模。 创建 EntityManager 时,我收到来自 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.

我找不到有关此警告的任何文档,我不确定它的含义。 我也想知道如何解决导致出现此警告的问题...

我是 JPA 的新手,所以这可能是一件愚蠢的事情。 我的程序真的很简单。这是实体定义:

@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:

<?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 字段获取另一个实体。

【问题讨论】:

【参考方案1】:

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

为了在 XxxToOne 关联上实现延迟获取,必须修改 JPA 实体的字节码(这就是编织的意思)。如果不修改,则只能预先获取 XxxToOne 关联。

Eager fetching 意味着每次从数据库加载Site 时,它的redirectID 也会被加载。使用延迟获取,您加载一个站点,并且仅在您调用 redirectID 字段上的方法时(延迟地)加载它的重定向。

【讨论】:

谢谢!出于某种原因,我跳过了这个资源。我去看看。 我必须将 -javaagent:eclipselink.jar 添加到 JVM 命令行才能使动态编织工作。见wiki.eclipse.org/EclipseLink/UserGuide/JPA/…

以上是关于无法理解 EclipseLink 警告的主要内容,如果未能解决你的问题,请参考以下文章

ubantu eclipe

JEE、eclipselink、glassfish4.0 无法持久化实体

无法理解 Mac 中的权限警告

EclipseLink 错误?简单的原生 SQL 查询异常

EclipseLink DDL 生成错误

JPA 从 EclipseLink 到哪个提供商?