SpringDataREST为集合指定延迟加载
我有两个具有一对多关系的实体: 公共类用户{ @身份证 @生成值 私人长id; 私有字符串用户名; 私有字符串电话号码; 私有时间戳creationDate; @onetomanaymappedby=用户 私有列表角色; } 公共阶级角色{ @身份证 @生成值 私人长id; @许多酮 @JoinColumnname=user\u id,null=false 私人用户; } 但当我调用get方法来加载用户信息时,我可以在日志文件中看到检索用户角色的附加查询也被调用。如何使用spring数据rest防止这种情况发生?将FetchType定义为LAZY,如下所示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
@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角色,所以不确定子实体的映射将如何解决这个问题。。。