我有以下课程
@Entity
@Table(name = "USR_E_GROUPS")
public class GroupEntity {
@Id
@Column(name = "UIDUSERGROUP")
@GenericGenerator(name = "generator", strategy = "uuid2")
@GeneratedValue(generator = "generator")
private String id;
.........
@OneToMany(mappedBy = "group", cascade = CascadeType.PERSIST)
private List<UserGroupEntity> users;
同样适用于UserGroupEntity
现在,如果我使用groupRepoository.findAll()
它正在为每个Group和UserGroupEntity的不同选择查询内部激活选择查询。所以花了太多时间。
我想让它通过连接激发选择,因此它将是一个查询。
答案 0 :(得分:1)
这可能是n + 1
问题。
来自docs
默认情况下,Hibernate3对集合使用延迟选择提取 延迟代理获取单值关联。这些默认值 对大多数应用程序中的大多数关联都有意义。
默认情况下,孩子们会懒惰地抓取。使用JOIN FETCH
在单个查询中获取结果。
在GroupRepoository
@Query("SELECT g FROM GroupEntity g JOIN FETCH g.users gu")
List<GroupEntity> findAllEager();