java – 在Spring Projections中获取延迟属性

栏目: Java · 发布时间: 5年前

内容简介:我认为没有办法指示JPA / Hibernate急切地使用投影获取.在执行获取查询后应用投影,因此修改查询为时已晚.使用请注意,这不如使用实体图或JOIN FETCH编写自定义查询有效.它的行为与在每个延迟加载的对象上调用Hibernate.initialize,执行另一个select查询相同.因此它导致N 1选择.但它可能是一个很好的入门方式.当某些事情开始变慢时,您仍然可以通过编写join-fetch或实体图形查询进行优化.
我目前正在尝试评估使用 Spring

Data JPA的可能性.

试图使用Projections,我目前只是试图获取特定属性Eager.

我有一个简单的实体,它使用外键延迟引用另一个实体.我现在想为前一个实体定义不同的预测. “原始”属性很好地投射到投影界面中,但是尝试投影另一个实体/投影会导致它仍然是延迟加载的.

我现在想告诉Spring / JPA急切地在预测中加载实体/投影.一种可能的方法是使用EntityGraphs(它们运行良好),但我必须使用不同的图形为每个方法创建存储库.问题是其他方式有哪些?

例:

实体买方:

@Entity
public class Buyer {
    private Integer id;
    private String someProperty;
    private User user;

    ...

    @OneToOne(
        fetch = FetchType.LAZY)
    @JoinColumn(
        name = "CAB_USR_ID",
        referencedColumnName = "ID",
        updatable = false,
        nullable = true,
        foreignKey = @ForeignKey(name = "FK_CAB_USR"))
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

实体用户:

@Entity
public class User {

    private Integer id;
    private String name;

    ...

}

投影买方

public interface BuyerCProjection {
    Integer getId();
    UserProjection getUser();
}

投影用户

public interface UserProjection {

    Integer getId();
    String getName();
}

我想使用的存储库

public interface BuyerRepository extends Repository<Buyer, Integer> {

    <T> List<T> findBy(Class<T> t);
}

我认为没有办法指示JPA / Hibernate急切地使用投影获取.在执行获取查询后应用投影,因此修改查询为时已晚.

使用 jackson-datatype-hibernate 模块并启用了FORCE_LAZY_LOADING功能,这是一个妥协的解决方案.这会强制初始化并返回投影中所有延迟加载的对象.

请注意,这不如使用实体图或JOIN FETCH编写自定义查询有效.它的行为与在每个延迟加载的对象上调用Hibernate.initialize,执行另一个select查询相同.因此它导致N 1选择.但它可能是一个很好的入门方式.当某些事情开始变慢时,您仍然可以通过编写join-fetch或实体图形查询进行优化.

翻译自:https://stackoverflow.com/questions/42268920/fetch-lazy-properties-in-spring-projections


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机图形学

计算机图形学

[美]PeterShirley / 高春晓、赵清杰、张文耀 / 人民邮电出版社 / 2007-6 / 49.00元

本书是国外高校采用率很高的计算机图形学教材,共分为26章,全面系统地讲解了计算机图形学的基本概念和相关技术。书中先介绍图形学相关的数学知识,然后依次讲解图形学的光栅算法、三三维观察、隐藏面消除、光照、纹理、绘制等算法和理论,并介绍可视感知、计算机动画、基于图像的绘制、可视化以及构建交互式图形应用等。 本书可作为信息技术等相关专业本科生、研究生计算机图形学课程的教材,也可以作为计算机图形学工作......一起来看看 《计算机图形学》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具