具有多个关系和映射参数的JPA查询

时间:2014-06-30 04:00:21

标签: java sql jpa

我正在Glassfish中为广告编写网络服务器。每个广告都有类别广告。每个类别或地点可能都有子类别/子位置。

我想在 category-tree place-tree 中选择广告。我为此场景创建的实体类如下所示。

类别实体:

@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;

所以我为类别和地点添加了一个名为 path 的字段/列。此路径是一个必须以其父路径开头的字符串。因此,如果我想在某个类别和地点找到所有广告,那么我会按照伪查询执行此操作:

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

我很难弄清楚如何使用JPA查询完成此操作,因为我不知道如何加入类别&amp;在 id 的情况下放置表以及如何匹配路径

任何人都可以帮我构建此查询吗?

1 个答案:

答案 0 :(得分:0)

我认为你不需要加入该类别&amp;摆放桌子。您可以通过关系来对广告进行过滤以进行分类和放置,如下所示:

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个表之间存在连接,并按类别和位置应用过滤器。