小编Fil*_*lou的帖子

当分离在Eclipselink中未按预期工作时,对惰性(未加载)集合的JPA调用方法

最近我尝试了一点JPA,试图更多地理解整个框架.我使用Eclipselink作为JPA提供程序.

我有两个实体有一个@OneToMany关系(一个人有很多地址)是懒惰加载.

当我加载一个人实体,分离它然后尝试访问(未加载)地址...它作为一个魅力.在调试时,我可以看到在执行size()地址列表的方法时执行了数据库查询.

我不明白为什么会有效.我希望有某种例外.我在最后几天(即这个链接)已经阅读了很多关于jpa等的内容,但是所有内容都指出了我不应该工作的结论.

任何人都可以解释为什么有效吗?

@Stateless
public class Test {
    @PersistenceContext(unitName="TestPU") EntityManager em;

    public void test() {
        Person person = em.find(Person.class, 1);

        System.out.println(person);

        System.out.println("em.contains(person): " + em.contains(person);

        em.detach(person);

        System.out.println("em.contains(person): " + em.contains(person);

        person.getAddresses().size();

        System.out.println("em.contains(person): " + em.contains(person);

        System.out.println(person);

    }
}
Run Code Online (Sandbox Code Playgroud)

结果日志将是

DEBUG: SELECT ... from PERSON WHERE (id = ?)
Person{id=1, name=Test, addresses={IndirectList: not instantiated}}
em.contains(person): true
em.contains(person): false
DEBUG: SELECT ... FROM ADDRESSES where (address_fk = ?)
em.contains(person): false
Person{id=1, name=Test, addresses={[Address{id=10, city=Testcity}]}}
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager detach eclipselink

5
推荐指数
1
解决办法
631
查看次数

标签 统计

detach ×1

eclipselink ×1

entitymanager ×1

java ×1

jpa ×1