簡體   English   中英

如何在JPA中查詢組合對象?

[英]How do I query an composed Object in JPA?

我現在想知道JPQL是否可以檢索組成的對象。 ObjectA具有ObjectB(聚合)。 我可以查詢沒有與ObjectA鏈接的ObjectB嗎? 原始查詢將是這樣的:

SELECT * FROM OBJECTB WHERE  ID_OBJECTA = NULL

有時,JPA創建一個關聯實體,但是我假設在這里只是添加ID_OBJECTA作為對其聚合器的引用。

謝謝你的幫助。

Class ClassA{
public ClassB b;
}

ClassB{
public String data;

}

我知道我可以這樣查詢:

Select a from ClassA a join a.b bb//Given a retrieve b

我想做這個:

Select b from ClassB b join ...// ClassB doenst have an a Attribute

如何從ClassB查詢ClassA

您需要一個雙向的一對一關聯。 在這種情況下,您有兩個選項:懶惰或急切加載。 除非您要用急切加載覆蓋延遲加載,否則都不需要在JQL中進行顯式聯接。 這當然是基於以下事實:正確定義了定義這些對象之間關系的批注/ xml。

您將在ClassB中需要一個屬性,用於ClassA類型,以保持與ClassA無關的ClassB關系中的更改。 此屬性還將允許在ClassB上的子查詢向父ClassA成員填充數據(渴望)或查詢存根(惰性)

public ClassA{
   ClassB Child;
}

public ClassB{
   ClassA parent;
   String data;
}

查看此Wiki圖書條目,它會引導您完成設置。 一對一它在與具有AddressPerson打交道並提出如何通過查詢地址來獲得該人的過程中提供了一個非常相似的場景。

注意:我剛剛讀到您正嘗試在沒有關聯的情況下執行此操作。 就像其他張貼者指出的那樣,添加這種關系是微不足道的。如果它比較懶,則幾乎不會增加任何開銷。 我能想到的不這樣做的唯一原因是為了避免對ClassA的引用污染classB而進行了一些誤導的嘗試。 記住“越差越好”的簡單性->正確性->一致性->完整性。 以最簡單的方式解決您的問題,而不是更簡單。

沒有從B到A的關聯,就無法實現您的第一個查詢AFAIK。您具有這樣的查詢的事實表明該關聯應該存在。

丑陋的解決方法是使用以下查詢:

select b from B b where b.id not in (select b.id from A a join a.b b)

但是,除了您想要的查詢之外,還可以進行其他查詢:

select b from A a join a.b b where ...

暫無
暫無

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

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