gpt4 book ai didi

java - JPA - 设置双向关系 -> 从 OneToMany-Collection 加载所有元素的开销很大吗?

转载 作者:行者123 更新时间:2023-12-02 06:52:28 24 4
gpt4 key购买 nike

考虑以下类。 Parent 类以 OneToMany 关系保存一个 Child 类的列表。如果我想建立双向关系,我必须将子级添加到父级的子级列表中,并将父级设置为子级。

要将子项添加到父项的子项列表中,我首先必须加载所有子项的列表。我认为如果我有一大堆 child 并且我实际上不需要 child 做任何事情,那么这是一个很大的开销。

查看示例代码。我可以对其进行优化吗?或者 JPA 是否已经针对此类操作进行了某种内置优化?

在此示例中,我跳过了 EntityManager 代码,但我认为代码应该做什么很清楚。

这是Child类:

@Entity
public class Child {

Parent parent;

@ManyToOne
public Parent getParent() {
return parent;
}

public void setParent(Parent parent) {
this.parent = parent;
}
}

这是类:

@Entity
public class Parent {


List<Child> children;

@OneToMany(mappedBy = "parent")
public List<Child> getChildren() {
return children;
}

public void setChildren(List<Child> children) {
this.children = children;
}
}

该类设置双向关系。

public class Tester {


public static void main(String[] args) {

// in a real application i would load that from the
// DB and it would maybe have already a lot of children
Parent parent = new Parent();
Child child = new Child(); //

// Set bidirectional relation
// Isn't this line a lot of overhead -> need to load all the children just to add an additional one?
parent.getChildren().add(child);
child.setParent(parent);
}
}

最佳答案

不必设置关联的另一端。您需要注意,如果该集合已经加载,或者在刷新完成之前加载,那么它将处于不一致的状态。

但通常情况下,您只是在事务中将子级添加到父级,而不执行任何其他操作,并且在这种情况下更新集合是没有用的。

如果集合太大,也许关联不应该是双向的。

关于java - JPA - 设置双向关系 -> 从 OneToMany-Collection 加载所有元素的开销很大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com