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
Jpa @多个延迟加载不工作_Jpa - Fatal编程技术网

Jpa @多个延迟加载不工作

Jpa @多个延迟加载不工作,jpa,Jpa,我看过其他关于这个问题的帖子,但没有找到解决我自己问题的答案。我有 @Entity @Table(name= ServerSpringConstants.COMPANY) public class Company implements Serializable { private static final long serialVersionUID = -9104996853272739161L; @Id @GeneratedValue(strategy

我看过其他关于这个问题的帖子,但没有找到解决我自己问题的答案。我有

    @Entity
    @Table(name= ServerSpringConstants.COMPANY)
    public class Company implements Serializable {
    private static final long serialVersionUID = -9104996853272739161L;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column (name = "companyID")
    private long companyID;

    @OneToMany (targetEntity = Division.class, cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE,
            CascadeType.REFRESH},
            fetch = FetchType.EAGER)
    @JoinTable (name = "companyDivisionJoinTable",
            joinColumns = @JoinColumn(name="companyID"),
            inverseJoinColumns = @JoinColumn(name="divisionID")
    )
    private Set<Division> divisions = new HashSet<>();

    public long getCompanyID() {
        return companyID;
    }

    public Set<Division> getDivisions() {
        return divisions;
    }

    public void setDivisions(Set<Division> divisions) {
        this.divisions = divisions;
    }
}
然而,由于某些原因,延迟加载不起作用。我用的是JPA。我将从一个“用户”类(相关部分)中调用这些公司及其封闭的部门

 @ManyToMany (targetEntity = Company.class,
        cascade={
                CascadeType.PERSIST,
                CascadeType.MERGE,
                CascadeType.REFRESH},
        fetch=FetchType.EAGER )
@JoinTable (
        name="companyUserJoinTable",
        joinColumns=@JoinColumn(name="userID"),
        inverseJoinColumns=@JoinColumn(name="companyID")
)
private Set<Company> company = new HashSet<>();
@ManyToMany(targetEntity=Company.class、,
级联={
cascade type.PERSIST,
CascadeType.MERGE,
CascadeType.REFRESH},
fetch=FetchType.EAGER)
@可接合(
name=“companyUserJoinTable”,
joinColumns=@JoinColumn(name=“userID”),
inverseJoinColumns=@JoinColumn(name=“companyID”)
)
私有集公司=新HashSet();
我已经搜索了现有的线程,并尝试添加各种建议,但没有任何帮助! 谢谢你的帮助


谢谢

由于您正在急切地加载分区集(fetch=FetchType.EAGER),并且您具有双向关联,因此分区将使用对公司的父引用进行初始化。我看不出有什么问题。Jpa加载了完整的对象树,因为您刚刚告诉过它。公司包含的部门包含对加载这些部门的公司的反向引用。 为了更好地理解它,由于延迟加载的原因是为了减少从数据库加载的数据,所以拥有的公司已经在部门的会话中加载了,所以为什么不设置关联呢

如果先加载分区,则另一端的@ManyToOne关联将生效


为了更准确地进行映射,还需要在关联的一部分添加@MappedBy属性。这不会影响抓取行为,但会防止关联两端对数据库进行双重更新。

一家公司在部门上有一个急切的抓取,如果我做得好,您可以通过公司访问部门。那是哪一个?如果你走另一条路,尝试先加载一个部门,那么它就不会加载引用的公司。谢谢你的回复,Grid。这让我头疼!我正在收回用户,这对于每个用户来说,收回了他们公司和部门的列表。目前,因为LAZY失败了,我得到了用户,有公司,有部门,有公司,有部门等等。所以我需要LAZY加载。我想要一个双向关系,因为有时我需要在运行报告时将数据从部门拉到公司。在双向关联的一侧添加一个@MappedBy(由您决定)。摆脱这些目标属性。再次为你的答案干杯。但为了让公司收回部门,我需要公司一方拥有,而且很多人都没有地图。如果我去掉部门一方的连接就行了。但我不能把公司从部门中拉回来。但无论如何,谢谢你的意见。再次感谢。正如我所看到的:用户会急切地吸引公司,公司会急切地吸引部门。然而,各部门会懒散地拉公司的后腿。但你的意思是,用户会导致整个链条被急切地拉动事实上,如果我从除法刀上退下来,懒惰的拉法确实有效。那么是父项设置了拉类型,就在链的下游?
 @ManyToMany (targetEntity = Company.class,
        cascade={
                CascadeType.PERSIST,
                CascadeType.MERGE,
                CascadeType.REFRESH},
        fetch=FetchType.EAGER )
@JoinTable (
        name="companyUserJoinTable",
        joinColumns=@JoinColumn(name="userID"),
        inverseJoinColumns=@JoinColumn(name="companyID")
)
private Set<Company> company = new HashSet<>();