Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:em.find不';t加载一对多集合_Java_Jpa_Eclipselink - Fatal编程技术网

Java JPA:em.find不';t加载一对多集合

Java JPA:em.find不';t加载一对多集合,java,jpa,eclipselink,Java,Jpa,Eclipselink,我使用EclipseLink作为JPA提供者。我拥有以下实体: @Entity class MyItem{ @Id int id; @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL,mappedBy = "item",orphanRemoval = false) @MapKey(name="fooCode") private Map<String,Foo> foos;

我使用EclipseLink作为JPA提供者。我拥有以下实体:

@Entity
class MyItem{
    @Id   
    int id;
    @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL,mappedBy = "item",orphanRemoval = false)
    @MapKey(name="fooCode")
    private Map<String,Foo> foos;
    ...
}
@实体
类MyItem{
@身份证
int-id;
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy=“item”,orphan=false)
@MapKey(name=“fooCode”)
私人地图;
...
}
当我这样做的时候
em.find(MyItem.class,id)
实体管理器只加载MyItem类字段-它不读取@OneToMany集合


我只能使用带有join的JPQL来解决这个问题。但是我想在没有JPQL的情况下实现它。如何?

这应该是可行的,您如何测试它是否未加载,以及您是否在字段和属性上都添加注释?我能看到这种情况的唯一方法是,将FetchType.EAGER声明放在由于混合访问类型而无法拾取的注释上。或者您正在读取的EntityManager上下文已经在其缓存中包含您的实体,其中包含不完整的fooscollection@Chris它不起作用。我通过sql查询看到它在日志中不起作用。对不起,什么不起作用?显示查找操作的日志-实体是否已加载到EntityManager上下文中?“查找”可能只命中缓存,因此不需要加载集合。尝试em.refresh(实体)并查看是否加载了地图,如果加载了,请确保您维护了关系的双方。@Chris,正如我所说,集合未加载,只加载了直接字段。正如我所说的,我在SQL查询中看到了它。如果您不显示更多信息,例如显示有问题的查询的日志,并且如果您不愿意检查代码,以查看在查找之前是否在没有引用的情况下插入了实体,我将无能为力。。。还请注意,仅查看sql查询不足以判断引用是否存在:它们可能以前已加载,并且在单独的查询中加载。这应该可以工作,您如何测试它是否未加载,以及是否在字段和属性上都添加注释?我能看到这种情况的唯一方法是,将FetchType.EAGER声明放在由于混合访问类型而无法拾取的注释上。或者您正在读取的EntityManager上下文已经在其缓存中包含您的实体,其中包含不完整的fooscollection@Chris它不起作用。我通过sql查询看到它在日志中不起作用。对不起,什么不起作用?显示查找操作的日志-实体是否已加载到EntityManager上下文中?“查找”可能只命中缓存,因此不需要加载集合。尝试em.refresh(实体)并查看是否加载了地图,如果加载了,请确保您维护了关系的双方。@Chris,正如我所说,集合未加载,只加载了直接字段。正如我所说的,我在SQL查询中看到了它。如果您不显示更多信息,例如显示有问题的查询的日志,并且如果您不愿意检查代码,以查看在查找之前是否在没有引用的情况下插入了实体,我将无能为力。。。还请注意,仅查看sql查询不足以判断引用是否存在:它们可能以前已加载,但无论如何都会在单独的查询中加载。