【发布时间】:2015-01-26 08:33:37
【问题描述】:
我最近开始重构我的项目,因为我不得不在我的某些表中添加一个额外的列。额外的列是一个枚举(Pending 或 Active)。 由于该更改,我现在需要重构所有查询,以便仅在状态为 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;
...
...
}
现在我的问题是如何让这个语句只返回处于活动状态的位置和标签?
SELECT pt FROM PlaceTag pt;
这可能吗?还是我必须显式编写查询?
谢谢
【问题讨论】:
-
这个解决方案对我有用,谢谢
标签: java hibernate jpa where hibernate-mapping