我們有 3 個物體 A、B 和 C。我們在表 A 中搜索 B 和 C 中的欄位。并且映射是單向的,所以 B 和 Collection 沒有在 A 中定義。我們使用的是 Spring 規范,我們該如何執行在這種情況下加入而不將映射轉換為雙向?
@Entity
public class A {
@Id
Long id
String name
}
@Entity
public class B {
@Id
Long id
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
A a;
@Column
String country;
}
@Entity
public class C {
@Id
Long id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
}
例如,如果 B 像這樣在 A 中定義
@Entity
public class A {
@Id
Long id
String name
@OneToOne(mappedBy = "request")
private B b;
}
加入將是這樣的
public static Specification<A> countryEquals(String country) {
return (root, query, builder) -> builder.equal(
root.join("b", JoinType.LEFT).get("country"), country);
}
但是A中沒有定義B,那么如何應用join呢?
uj5u.com熱心網友回復:
您可以嘗試通過 B 本身加入它,您可以創建一個新的 Root 和影像,然后將其添加where b.a_id = a.id到您的查詢中,或者在這里,您的 CriteriaBuilder,然后您可以添加更多謂詞來查找 B 表中的欄位。像這樣的東西,有點偽代碼,因為我這里沒有我的代碼 atm 并用我的記憶寫下來,但我希望它可以幫助
public static Specification<A> countryEquals(String country) {
return (root, query, builder) -> (
Root<B> b_root = query.from(B.class);
Predicate b_join = builder.equal(b_root.get("a_id"), root.get("id"))
Predicate b_country = builder.equal(b_root.get("country"), country) // or like with `%country%`
return builder.and(other_predicate,...., b_join, b_country)
)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/531985.html
上一篇:任務:react-native-async-storage_async-storage:generateReleaseRFileFAILED
