我最近开始重构我的项目,因为我必须在我的某些表中添加一个额外的列。额外列是枚举(待定或活动)。 由于这种改变,我现在需要重构我的所有查询,如果状态为ACTIVE,则只检索一行。
经过一些研究后,我发现我们可以使用@Where注释来注释实体。它在一个简单的列上使用它,但我的表看起来像这样:
@Where(clause = 'state='ACTIVE'")
@Entity
public class Place {
@Column(name="id_place")
private String placeId;
@Column(name="name")
private String palceName;
@OneToMany(mappedBy = "place")
private Set<PlaceTag> placeTag;
...
...
}
@Where(clause = 'state='ACTIVE'")
@Entity
public class Tag {
@Column(name="id_tag")
private String tagId;
@Column(name="name")
private String tagName;
@OneToMany(mappedBy = "tag")
private Set<PlaceTag> placeTag;
...
...
}
@Where(clause = 'poi.state='ACTIVE' AND tag.state='ACTIVE")
@Entity
public class PlaceTag {
@Column(name="id")
private String id;
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
@JoinColumn(name = "place_id")
private Place place;
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
@JoinColumn(name = "tag_id")
private Tag tag;
...
...
}
现在我的问题是如何才能使这句话只返回ACTIVE的地方和标签?
SELECT pt FROM PlaceTag pt;
这可能吗?或者我是否必须明确地编写查询?
谢谢
答案 0 :(得分:0)
正如您已经发现的那样,或仅仅使用案例@Where
子句就好了,但在您的情况下,您希望按地点和标记过滤PlaceTag
,因此需要加入这种情况。
因此,您可以保留@Where
和Place
的{{1}}子句,而对于Tag
,您需要使用JPQL查询:
PlaceTags