SpringDataREST为集合指定延迟加载

SpringDataREST为集合指定延迟加载,spring,spring-data-jpa,spring-data-rest,Spring,Spring Data Jpa,Spring Data Rest,我有两个具有一对多关系的实体: 公共类用户{ @身份证 @生成值 私人长id; 私有字符串用户名; 私有字符串电话号码; 私有时间戳creationDate; @onetomanaymappedby=用户 私有列表角色; } 公共阶级角色{ @身份证 @生成值 私人长id; @许多酮 @JoinColumnname=user\u id,null=false 私人用户; } 但当我调用get方法来加载用户信息时,我可以在日志文件中看到检索用户角色的附加查询也被调用。如何使用spring数据rest

我有两个具有一对多关系的实体:

公共类用户{ @身份证 @生成值 私人长id; 私有字符串用户名; 私有字符串电话号码; 私有时间戳creationDate; @onetomanaymappedby=用户 私有列表角色; } 公共阶级角色{ @身份证 @生成值 私人长id; @许多酮 @JoinColumnname=user\u id,null=false 私人用户; } 但当我调用get方法来加载用户信息时,我可以在日志文件中看到检索用户角色的附加查询也被调用。如何使用spring数据rest防止这种情况发生?

将FetchType定义为LAZY,如下所示

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;

默认情况下,用于manytone的jpafetchtype是急切的。由于您使用的是SDR,请参阅,为了防止在获得用户时加载角色,您可以:

1为角色创建存储库。如果您有一个检查,它是否导出@RepositoryRestResourceexported=true-默认情况下,只需添加不带此参数的注释

2或使用户不具有角色:

@Projection(name = "justUser", types = User.class)
public interface JustUser {
    String getUsername();
    String getPhoneNumber();
    Timestamp getCreationDate();
}
然后在您的请求中使用它,如下所示:

GET /users?projection=justUser

尝试将fetchType设置为LAZYit不适用于spring数据rest实体。另外,默认情况下fetchType是惰性的。默认情况下,您需要显示的是如何检索和操作用户实体。作为提示,启用SQL日志您可以查看角色查询是否在第二次执行实际上,我发现打开show_SQL属性时存在问题,但感谢您的建议。我尝试了这种方法,但没有成功。事实上,我加载了所有usersnot角色,所以不确定子实体的映射将如何解决这个问题。。。