【问题标题】:how i can use jpa inner fetch join in jpa repository?我如何在 jpa 存储库中使用 jpa 内部提取连接?
【发布时间】:2021-02-17 18:19:03
【问题描述】:

我正在尝试使用 spring data jpa。 如果我打电话给findById,那么 fetch join 就可以了。 但如果我没有使用 id 条件(例如)findByMemberId,则 fetch join 不起作用。

我正在尝试实体图,但我想使用内部提取连接。

我如何使用 jpa fetch join?

这是我的代码。

@Getter
@Setter
@Entity
public class Delivery {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private Long memberId;

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "order_id")
    private Order order;
...
...
}

@Getter
@Setter
@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
...
...
}

DeliveryRepository.java

@Repository
public interface DeliveryRepository extends JpaRepository<Delivery, Long> {
     Optional<Gift> findByMemberId(Long MemberId);
}

服务

...
deliveryRepository.findById(1L); // fetch join working
deliveryRepository.findByMemberId(1234L); // fetch join not working
...

【问题讨论】:

    标签: java spring spring-boot jpa spring-data-jpa


    【解决方案1】:

    对于派生查询,Spring Data JPA 构造一个显式查询。因此,注释中的 fetch 配置不适用。定义实体图并将其应用于该方法应该可以让您获得所需的获取策略。

    请参阅https://www.baeldung.com/spring-data-jpa-named-entity-graphs 了解如何执行此操作的示例。

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 2023-03-03
      • 2012-10-20
      • 2021-04-06
      • 2021-09-13
      • 2016-04-16
      • 1970-01-01
      • 2017-11-19
      • 2017-12-14
      相关资源
      最近更新 更多