2014-10-29 51 views
0

你能給出它由三個子實體擴展SubEntityA一個SuperEntity,SubEntityBSubEntityC尋子實體,在SuperEntity進行條件查詢只檢索SubEntityBSubEntityC休眠/ JPA:如何使用InheritanceType.JOINED

With InheritanceType.SINGLE_TABLE您可以設置我相信用於查詢的鑑別器值。它如何完成InheritanceType.JOINED?

回答

2

a)您也可以在JOINED實體層次結構中包含(冗餘)@DiscriminatorColumn/@DiscriminatorValue

b)你可以使用JPQL type操作:http://en.wikibooks.org/wiki/Java_Persistence/JPQL#JPQL_special_operators,像SELECT se FROM SuperEntity se WHERE TYPE(se) <> SubEntityA

c)利用多個查詢(SELECT se FROM SubEntityB se + SELECT se FROM SubEntityC se)來收集所有感興趣的實體。

+0

在a)你的意思是一個自己的字符串列?或者可以通過@DiscriminatorValue(value =「MyClass」)來完成 – momomo 2014-10-29 14:08:11

+1

@DiscriminatorColumn和@DiscriminatorValue可以用於'SINGLE_TABLE'和'JOINED'。如果你願意,你甚至可以用實體中的只讀字段'重寫'鑑別器列,以便能夠獲得乾淨的JPQL查詢。 – JimmyB 2014-10-29 14:14:34

+0

你爲什麼說「多餘」?如果你沒有定義它,它不會被創建,據我所知。我的桌子沒有一個。 – momomo 2014-10-29 14:36:04