Spring Data JPA +字节码增强

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?