如何解决Spring Data JPA +字节码增强
是否可以使用JPA接口(实体图)急于加载@ * ToOne属性,而JPA接口是通过父实体类中的@LazyToOne,@LazyGroup设置为惰性并启用了字节码增强功能?我正在尝试使用实体图急于加载此类属性,但是当查询父实体时,它会触发针对此类@ * ToOne属性的另一个查询。
尝试通过另一种方法来覆盖实体类中的静态提取类型,包括通过字节码增强添加的@LazyToOne。
使用Spring 5.1.3,Spring JPA 2.2,Hibernate 5.4.19
更新:数据JPA可以按预期工作,我可以看到我尝试热切获取的属性的联接,但是那些懒惰的属性未使用联接查询响应初始化,并且休眠,导致每个查询都引用了带注释的属性@ LazyToOneOption.NO_PROXY,并且已经使用我的存储库中的实体图急切地获取了。
由于我从JPA存储库中的实体图中急切地获得了该数据,我该如何避免甚至不需要的第二次选择?
任何帮助将不胜感激。
解决方法
实体图就像Hibernate提取配置文件一样适用,无论您在关联上具有什么注释。如果不是这样,则可能是Spring Data中存在错误,甚至可能是Hibernate。最好用JIRA issue创建一个新的test case来重现问题。
话虽如此,我认为这是Blaze-Persistence Entity Views的完美用例。
我创建了该库,以允许在JPA模型与自定义接口或抽象类定义的模型之间轻松进行映射,例如类固醇上的Spring Data Projections。这个想法是,您可以按自己喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(获取器)映射到实体模型。
带有Blaze-Persistence实体视图的DTO模型示例如下所示:
@EntityView(User.class)
public interface UserDto {
@IdMapping
Long getId();
String getName();
Set<RoleDto> getRoles();
@EntityView(Role.class)
interface RoleDto {
@IdMapping
Long getId();
String getName();
}
// Other mappings
}
查询是将实体视图应用于查询的问题,最简单的方法就是按ID查询。
UserDto a = entityViewManager.find(entityManager,UserDto.class,id);
Spring Data集成使您可以像使用Spring Data Projections一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。