我正在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 的情况下放置表以及如何匹配路径。
任何人都可以帮我构建此查询吗?
答案 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个表之间存在连接,并按类别和位置应用过滤器。