[英]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.