Java Crudepository findAll()将取代long-alternative?提高性能?

Java Crudepository findAll()将取代long-alternative?提高性能?,java,spring,spring-boot,spring-data,Java,Spring,Spring Boot,Spring Data,在我的控制器中,我使用crudepository方法findAll()查找数据库中的所有用户,如下所示: userRepository.findAll() 问题是这样做只需1.3分钟就可以加载1500个用户。从那里,我将数据加载到一个带有Thymeleaf的模型中,并将其显示在一个html表中:名称、创建的时间、电子邮件、id、数据包和每个用户的状态。有没有办法提高性能或解决我的问题? 任何帮助都是非常感谢的 这是我的用户实体 @Id @SequenceGenerator(na

在我的控制器中,我使用crudepository方法findAll()查找数据库中的所有用户,如下所示:

userRepository.findAll()
问题是这样做只需1.3分钟就可以加载1500个用户。从那里,我将数据加载到一个带有Thymeleaf的模型中,并将其显示在一个html表中:名称、创建的时间、电子邮件、id、数据包和每个用户的状态。有没有办法提高性能或解决我的问题? 任何帮助都是非常感谢的

这是我的用户实体

    @Id
    @SequenceGenerator(name = "user_id_generator", sequenceName = "user_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_generator")
    private Long id;
    @Column(nullable = false, unique = true)
    private String email;
    @Column(name = "uuid", nullable = false, unique = true)
    private String uuid;
    @Column(name = "reset_pwd_uuid", unique = true)
    private String resetPwdUuid;
    @Column(nullable = false)
    private String password;
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Status status;
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Packet packet = Packet.BASE;
    @Enumerated(EnumType.STRING)
    @Column
    private Situation situation;
    @Column(nullable = false, name = "numberOfSomething")
    private Integer apples;
    @Column(nullable = false, name = "numberOfSomethingElse")
    private Integer oranges;
    @Column(name = "time_created")
    private Timestamp timeCreated;

    @OneToMany(mappedBy = "user", cascade = {CascadeType.REMOVE})
    @LazyCollection(LazyCollectionOption.FALSE)
    @OrderBy("rank ASC")
    private List<Person> person;

    @OneToMany(mappedBy = "user", cascade = {CascadeType.REMOVE})
    @LazyCollection(LazyCollectionOption.FALSE)
    @OrderBy("timeOccured ASC")
    private List<History> history;

    @OneToMany(mappedBy = "user", cascade = {CascadeType.REMOVE})
    @LazyCollection(LazyCollectionOption.FALSE)
    @OrderBy("id ASC")
    private List<Invoice> invoices;

    @OneToOne(mappedBy = "user", cascade = {CascadeType.REMOVE})
    private Building building;

    @OneToOne(mappedBy = "user", cascade = {CascadeType.REMOVE})
    private House house;

    @OneToOne(mappedBy = "user", cascade = {CascadeType.REMOVE})
    private Car car;

    @OneToOne(mappedBy = "user", cascade = {CascadeType.REMOVE})
    private Street street;

    @OneToOne(mappedBy = "user", cascade = {CascadeType.REMOVE})
    private Moreof moreof;

    @JoinColumn(name = "basedata_id", referencedColumnName = "id")
    @ManyToOne(cascade = {CascadeType.REMOVE})
    private Basedata basedata;

    @Column(name = "family")
    private String family;

    @Column(name = "unkle_mail")
    private boolean unkleMail;

    @Column(name = "vacation")
    private LocalDate vacationUntil;

    @Column(name = "ordered")
    private boolean ordered;

    @Column(name = "shipped")
    private boolean shipped;

    @Transient
    private boolean isEdit;

    @Transient
    private boolean one;
    @Transient
    private boolean two;
    @Transient
    private boolean three;
    @Transient
    private boolean four;
    @Transient
    private LocalDate regDate;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user", cascade = CascadeType.REMOVE)
    private List<Bed> bed;
@Id
@SequenceGenerator(name=“user\u id\u generator”,sequenceName=“user\u id\u seq”,allocationSize=1)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“用户id\U生成器”)
私人长id;
@列(nullable=false,unique=true)
私人字符串电子邮件;
@列(name=“uuid”,nullable=false,unique=true)
私有字符串uuid;
@列(name=“reset\u pwd\u uuid”,unique=true)
私有字符串resetpwduid;
@列(nullable=false)
私有字符串密码;
@枚举(EnumType.STRING)
@列(nullable=false)
私人身份;
@枚举(EnumType.STRING)
@列(nullable=false)
专用分组=Packet.BASE;
@枚举(EnumType.STRING)
@纵队
私人情况;
@列(nullable=false,name=“numberOfSomething”)
私有整数苹果;
@列(nullable=false,name=“numberOfSomethingElse”)
私人整数橙子;
@列(name=“创建时间”)
创建私有时间戳;
@OneToMany(mappedBy=“user”,cascade={CascadeType.REMOVE})
@LazyCollection(LazyCollectionOption.FALSE)
@订购人(“等级ASC”)
私人名单人士;
@OneToMany(mappedBy=“user”,cascade={CascadeType.REMOVE})
@LazyCollection(LazyCollectionOption.FALSE)
@订购人(“时间发生ASC”)
私人名单历史;
@OneToMany(mappedBy=“user”,cascade={CascadeType.REMOVE})
@LazyCollection(LazyCollectionOption.FALSE)
@订购人(“id ASC”)
私人清单发票;
@OneTONE(mappedBy=“user”,cascade={CascadeType.REMOVE})
私人楼宇;;
@OneTONE(mappedBy=“user”,cascade={CascadeType.REMOVE})
私人住宅;
@OneTONE(mappedBy=“user”,cascade={CascadeType.REMOVE})
私家车;
@OneTONE(mappedBy=“user”,cascade={CascadeType.REMOVE})
私家街;;
@OneTONE(mappedBy=“user”,cascade={CascadeType.REMOVE})
私人莫洛夫·莫洛夫;
@JoinColumn(name=“basedata\u id”,referencedColumnName=“id”)
@ManyToOne(cascade={CascadeType.REMOVE})
私有基础数据;
@列(name=“family”)
私弦家庭;
@列(name=“unkle\u mail”)
私有布尔unkleMail;
@列(name=“假期”)
私人本地日期假期至;
@列(name=“ordered”)
私有布尔序;
@列(name=“shipped”)
私有布尔值;
@短暂的
私有布尔isEdit;
@短暂的
私有布尔型;
@短暂的
私有布尔二;
@短暂的
私有布尔三;
@短暂的
私有布尔四;
@短暂的
私有LocalDate regDate;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“user”,cascade=CascadeType.REMOVE)
私人床位;

加载1500个用户不应该花费那么长的时间,需要花费很长时间的是加载关联

问题

默认情况下,在JPA中,任何toMany关系都是延迟加载的,这意味着与您的实体一起,您有一个到集合的代理,并且集合实际上是在第一次访问时加载的,因此在这种情况下,获取1500个用户不应该花费那么长的时间

在您的情况下,您可以通过在jpa级别上指定要进行的抓取或在hibernate级别上使用
@LazyCollection(LazyCollectionOption.FALSE)
来禁用延迟加载,这是不推荐的,并且可能会有性能问题

解决方案


显然,解决方案是不禁用延迟加载

您是否需要在急切模式下加载列表bed,还是可以在延迟模式下加载?这可能会产生影响。