微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决休眠 n+1 问题 OneToMany 和 ManyToOne

如何解决如何解决休眠 n+1 问题 OneToMany 和 ManyToOne

我在使用 N+1 Hibernate 时遇到问题。 我有以下实体:

public class Coupon {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @Builder.Default
    @OnetoMany(fetch = FetchType.LAZY,targetEntity = CouponType.class,cascade = CascadeType.ALL,mappedBy = "coupon")
    private List<CouponType> couponTypeList = new ArrayList<>();
public class CouponType {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;


    @ManyToOne
    private Match match;

    @ManyToOne
    private Coupon coupon;
public class Match {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @Builder.Default
    @OnetoMany(fetch = FetchType.LAZY,mappedBy = "match")
    private List<CouponType> couponTypeList = new ArrayList<>();

我想避免休眠中的 N+1 问题。如何在 JPQL 中正确写入查询

解决方案:

@Query("select c from Coupon c join fetch c.couponTypeList t join fetch t.match where c.id = ?1") 
Optional<Coupon> getCoupon(Long couponId)

解决方法

尝试使用以下查询:

@Query("select c from Coupon c join fetch c.couponTypeList where c.id = ?1")
Optional<Coupon> getCoupon(Long couponId);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。