java - Hibernate OneToMany List 或 Iterator 不同?

标签 java hibernate hibernate-onetomany

@Entity
@Table(name = "STUDENT")
public class Student {

    private long studentId;
    private String studentName;
    private List<Phone> studentPhoneNumbers;

    ....

    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") })
    public List<Phone> getStudentPhoneNumbers() {
        return this.studentPhoneNumbers;
    }

    public void setStudentPhoneNumbers(List<Phone> studentPhoneNumbers) {
        this.studentPhoneNumbers = studentPhoneNumbers;
    }
}

1)

Student student = session.loadStudent(123); // pseudocode
List phoneList = student.getStudentPhoneNumbers();
for (Phone p : phoneList) {
    ...
}

2)

Student student = session.loadStudent(123); // pseudocode
List phoneList = student.getStudentPhoneNumbers();
Iterator itr = phoneList.iterator();   
while(itr.hasNext()) {
    ...
}

我从这里阅读了答案:difference between query.list and query.iterate

显然,list()iterator() 之间存在差异(在 Query 中)。如果我在 OneToMany 列表中使用它会怎样?就像上面的例子,性能上有区别吗?内存?

最佳答案

与 Hibernate 无关。

当Java编译器遇到

for (Phone p : phoneList) {
    ....
}

它自动生成相当于

的代码
for (Iterator<Phone> itr = phoneList.iterator(); itr.hasNext();) {
    Phone p = itr.next();
    ....
}

因此,您所展示的两个示例本质上是相同的。

关于java - Hibernate OneToMany List 或 Iterator 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44690178/

相关文章:

java - 乒乓球离开帕德尔

java - Spring JPA 的@transactional 注释不起作用

java - Hibernate:删除的对象将通过级联重新保存

java - JPA @ManyToMany 仅在一侧?

java - 无法在 hibernate 中删除 OneToMany 关系的实例

java - 使用 sshj java 库在我的 Amazon EC2 机器上执行 "sudo"命令

java - JOOQ Oracle 数字精度和 Java 数字映射

Java - 提取子元素

spring-boot - Hibernate OneToMany 来自父级的错误绑定(bind)