簡體   English   中英

避免在 Spring 數據 JPA 中獲取 @ManyToOne 屬性

[英]Avoid fetching @ManyToOne property in Spring data JPA

我有以下三個實體。 我正在使用基於 Lombok 的 getter 和 setter:

@Getter
@Setter
@EqualsAndHashCode(callSuper = true, exclude = { "cClasses"})
class AClass {
   // some properties
   @OneToMany(mappedBy = "aClass", orphanRemoval = true)
   private List<CClass> cClasses;
}

class BClass {
  // some properties
}

@Getter
@Setter
@EqualsAndHashCode(callSuper = true, exclude = { "aClass", "bClass"})
class CClass {
  // other properties
  // this is bidirectional
  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  @JoinColumn(name = "A_ID", referencedColumnName = "A_ID")
  private AClass aClass;

  // this is unidirectional
  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  @JoinColumn(name = "B_ID", referencedColumnName = "B_ID")
  private BClass bClass;
}

並通過 JPA 存儲庫類如下所示:

@Repository
public interface CClassRepository extends JpaRepository<CClass, Long> {
  List<CClass> findByBClassBidIn(List<Long> ids);
}

輸出按預期進行,但性能很差。 我可以在日志中看到所有 AClass 的選擇查詢也正在執行。 如何避免調用 @ManyToOne 屬性 aClass。

我嘗試在 CClass 的 aClass 屬性上使用 @JsonManagedReference 和 @JsonIgnore。 但是當我調用存儲庫方法時它仍然在獲取這些記錄。 請建議如何解決這個問題。

最好把關系ClassC ,讓ClassB知道ClassC

class BClass {
  @OneTOMany(...)
  private CClass cClass;
}

@Repository
public interface BClassRepository extends JpaRepository<BClass, Long> {

  @Query("select ClassB.cClass where ClassB.id is in `ids`") // might be wrong syntax
  List<CClass> findCclassesByBClassIdIn(List<Long> ids);
}

它只查詢一次數據庫,即從所有者一側查詢數據庫,即帶有@JoinColumn 注釋的一側。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM