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