投影不会延迟加载 ManyToOne 关系

Projections do not load ManyToOne relations lazily

我有一个代表 MySQL table:

的实体
@Entity
@Table(name = "group_")
@Getter
@Setter
@SuppressWarnings("serial")
public class GroupEntity
        implements Serializable {

    @Id
    @GeneratedValue(generator = "uuid2")
    @Column(name = "group_id")
    private UUID groupId;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "owner_account_id")
    @NotNull
    private AccountEntity ownerAccount;

    @Column(name = "value")
    @NotBlank
    private String value;

}

还有一个投影:

public interface GroupBaseProjection {

    UUID getGroupId();

    AccountEntity getOwnerAccount();

}

这是我的存储库:

public interface GroupsRepository extends JpaRepository<GroupEntity, UUID> {

    GroupBaseProjection findBaseByGroupId(UUID groupId);

}

当我检索实体时,ownerAccount 是延迟加载的(Hibernate MySQL 查询只选择它的 ID)但是当我检索投影时,它是急切加载的(Hibernate MySQL 查询对所有 AccountEntity 列进行内部连接)。所以我无法只检索 GroupEntity 的某些列(我必须使用实体检索所有列,或者使用投影检索其中一些加上 AccountEntity 的所有列)。

有没有办法让投影延迟加载 @ManyToOne 关系?我试过用 @ManyToOne(fetch = FetchType.LAZY, optional = false)@LazyToOne(LazyToOneOption.PROXY) 注释 getOwnerAccount() 投影方法,但它没有用。

So there is no way I can retrieve only some columns of the GroupEntity

当然有,只是使用嵌套投影:

public interface AccountProjection {

    Long getId();

    String getName();

   ... // other columns

} 

public interface GroupBaseProjection {

    UUID getGroupId();

    AccountProjection getOwnerAccount();

}

Is there a way I can get the projection to load the @ManyToOne relation lazily?

我不这么认为,因为投影不是实体,因此它们不受 JPA 管理。

编辑看起来嵌套投影 select 所有实体属性(见评论)。作为解决方法,如果您只对 id 感兴趣,您可以尝试再次将连接列映射为简单的 属性:

@Column(name = "owner_account_id", insertable = false, updatable = false)
private Long ownerAccountId;

通过这种方式,您将能够使其成为投影的一部分。