2014-06-30 83 views
0

我正在爲Glassfish的廣告編寫Web服務器。每個廣告具有類別地點。每個類別或地點可能有子類別/子地點。帶有幾個關係和映射參數的JPA查詢

我想選擇廣告白皮書類別樹地點樹。下面顯示了我爲此場景創建的實體類。

類別實體:

@Entity 
public class Category { 

    @Id 
    private Long id; 

    @OneToMany(mappedBy="category") 
    List<Ad> ads; 

    @Basic 
    private String path; 
} 

的地方實體:

@Entity 
public class Place { 
    @Id 
    private Long id; 

    @OneToMany(mappedBy="place") 
    List<Ad> ads; 

    @Basic 
    private String path; 
} 

的廣告實體:

@Entity 
public class Ad { 
    @Id 
    private Long id; 

    @ManyToOne 
    Category category; 

    @ManyToOne 
    Place place; 

所以我添加了一個名爲字段/列路徑爲類別和地點。此路徑是一個字符串,必須以其父母路徑開頭。所以,如果我想找到的所有廣告whitin類別和地方,然後我會做以下僞查詢:

SELECT a from Ad a WHERE Category.pathid "STARTS WITH" getCategoryPathByID(PARAMETER 1) 
        AND Place.pathid "STARTS WITH" getPlacePathByID(PARAMETER 2) 

我有很難搞清楚,因爲我不知道如何與一個JPA查詢做到這一點如何加入類別&地方表和如何匹配路徑給定ID

任何人都可以幫助我如何構建此查詢?

回答

0

我不認爲你需要加入類別&地方表。您可以通過關係過濾廣告categoy和地點,這樣的事情:

select a from Ad a where a.category.pathid like 'x' and a.place.pathid like 'x' 

的廣告是你可以涉及的類別和地點表,也許這樣的事情可能是有用的方式

select a from Category c join c.ads a join a.place p 
where c.pathid like '' 
and p.pathid like '' 

在此查詢中,3個表格之間存在連接,並按類別和位置應用篩選器。