我有一个对象,它有一个使用 ManyToMany 映射的集合。该集合可以是相当大的数十万个整体。当我想向集合中添加成员时,JPA 会在添加新条目之前撤回集合中的每个对象。
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name = "ROOM_USER",
joinColumns = @JoinColumn(name = "ROOM_ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID"))
private Set<User> members;
稍后在服务类中,我想将用户添加到集合中,如下所示
room.addMember(user);
由于关系被声明为惰性,因此当我在房间上调用 addMember 时,代理会获取成员集。这里的问题是当集合变大时,检索成员集合需要相当长的时间。在这种情况下,索引工作正常,我检查了 mysql 中的查询,问题很简单,它提取了大量数据,而我真正想要的只是将行添加到 ROOM_USER 连接表中。
JPA 是否定义了一种将成员添加到集合而不拉回整个集合的方法?
其他一些注意事项我正在使用 Spring 框架和 Hibernate 来实现 JPA。