我有一個從兩個jpa實體(繼承)生成的單個表。所以我們在數據庫表中生成一個DTYPE列,其實體名稱具有值。針對DTYPE的JPA查詢
如何寫一個jpa查詢來獲取任何給定實體的數據。即DTYPE ='A'?
我剛剛嘗試在jpa查詢中使用DTYPE,但如預期的那樣,出現「無法解析屬性」錯誤。請讓我知道如何編寫這個查詢。
注 - 我不想使用本機查詢。
更新:
我有A類和AA子延伸A. DTYPE有兩個值A和AA。
當我查詢A時,我得到所有A加AA實體。當我查詢A時如何排除AA?
我有一個從兩個jpa實體(繼承)生成的單個表。所以我們在數據庫表中生成一個DTYPE列,其實體名稱具有值。針對DTYPE的JPA查詢
如何寫一個jpa查詢來獲取任何給定實體的數據。即DTYPE ='A'?
我剛剛嘗試在jpa查詢中使用DTYPE,但如預期的那樣,出現「無法解析屬性」錯誤。請讓我知道如何編寫這個查詢。
注 - 我不想使用本機查詢。
更新:
我有A類和AA子延伸A. DTYPE有兩個值A和AA。
當我查詢A時,我得到所有A加AA實體。當我查詢A時如何排除AA?
假設你有三個實體:
其中最後兩個是兩個實體您使用鑑別器列存儲,您的JPA-QL查詢應該如此簡單:
select p from Person p
得到所有的人。 JPA足夠聰明地弄明白了。同樣,你可以這樣做:
select p from Party p
並得到他們所有人。
Cletus,當你查詢黨如何排除人? – 2010-01-15 11:45:12
@ tom_987:您不查詢派對,您查詢個人或組織。 Party只是繼承類型的基類/通用類型。 – 2011-10-05 17:21:05
您可以在您的JPA查詢中使用實體名稱,將鑑別器列抽象出來。
假設你有兩個實體類SubClassA
和SubClassB
,這無論是從SuperClass
繼承,那麼你可以爲這些entites的,像這樣的查詢:
FROM SubClassA WHERE [...]
或
FROM SubClassB WHERE [...]
如果您想查詢對於兩個實體,請使用
FROM SuperClass WHERE [...]
Henning能否請您閱讀我的更新並回復我的問題 – 2010-01-15 11:55:57
只需在父類中添加一個簡單字段dtype即可。 (可插入= false,可更新= false) private String dtype;
所以,你可以用它在你的JPQL查詢
另外的什麼@SCH職位中,如沒有直接爲我工作,使用的是Oracle,我得到一個異常說「D型「是一種保留的關鍵字。然後我做了
@DiscriminatorColumn(name = "myDType")
class abstract AbstractClass{
@Column(insertable = false, updatable = false)
private String myDType;
[...]
這工作對我很好,因爲這樣我可以動態改變我想用一個where條件而不是改變FROM語句來查詢類型。
我得到了解決方案:) 我用「選擇*從A其中a.id不在(選擇aa.id從AA aa)」內轉換爲sql查詢選擇....不在(選擇ID從表t t其中t.DYPE ='AA') – 2010-01-15 12:21:04