2012-09-24 41 views
2

我有我的模式是這樣的:加入只有在一個實施

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "resourceType", discriminatorType = DiscriminatorType.INTEGER) 
public abstract class Resource { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    Long id; 

    String foo; 
} 


@MappedSuperclass 
public abstract class NetworkResource extends Resource { 
    String bar; 
} 

@Entity 
@DiscriminatorValue(value = "1") 
public class URL extends NetworkResource { 
    String url; 
} 

我把歧視值在所有具體的實現,是因爲我不想參加,在的大部分擴展資源的所有表次,我將通過示例僅加入networkresource表。

所以,我想知道我該怎麼做。

我已經嘗試過類似:

SELECT c FROM URL c LEFT JOIN c.resource r where r.resourceType = 1 and r.url = :ip 

但我得到的編譯錯誤,當我加入r.resourceType = 1

那麼,我該怎麼做呢?

謝謝。

+0

你想通過'c.resource'在你的查詢中說什麼? 'c'是一個'URL','URL'沒有'resource'屬性。 –

回答

0

基於一些關於你正在試圖做什麼的假設,我覺得你只是想:

select c from URL c where c.url = :ip 

Hibernate會照顧加入加盟和限制的鑑別。這幾乎是Hibernate的用處。