无法理解 EclipseLink 警告

发布于 2024-12-18 06:22:39 字数 2028 浏览 2 评论 0原文

我正在使用 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 字段获取另一个实体。

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

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

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>

The code that causes this warning:

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

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凤舞天涯 2024-12-25 06:22:39

请参阅http://wiki.eclipse.org/Introduction_to_EclipseLink_Application_Development_%28ELUG%29#Using_Weaving

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

急切获取意味着每次从数据库加载 Site 时,它的 redirectID 也会被加载。通过延迟获取,您可以加载网站,并且仅当您调用 redirectID 字段上的方法时才会(延迟)加载其重定向。

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

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.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文