jpa - 无法理解EclipseLink警告

标签 jpa eclipselink self-join

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

最佳答案

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

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

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

关于jpa - 无法理解EclipseLink警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285684/

相关文章:

php - 如何输出使用别名的 MySQL 查询的结果?

mysql - com.mysql.jdbc.MysqlDataTruncation : Data truncation: Incorrect datetime value

java - EclipseLink 查询 - 从学生中选择计数(*)不工作

jpa - Aspectj 编译时基于编织的事务不起作用(来自 WebService 调用的 JPA)

java - JPA:在 JPQL 中加入

mysql - 使用 LEFT JOIN 和 SELF JOIN 以及聚合函数计算 acceptance_ratio

java - JPA OneToOne 双向。

java - 在 OSGI 应用程序中提供 EntityManager 的最佳实践

java - 如何加载实际的 Hibernate 实体关联而不是 LAZY 代理

ruby-on-rails - ActiveRecord:在自连接中删除子项后使外键无效