gpt4 book ai didi

java - ManyToOne 关系上的 Hibernate @Where 注释

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:20 26 4
gpt4 key购买 nike

我最近开始重构我的项目,因为我不得不在我的一些表格中添加一个额外的列。额外的列是枚举(待定或 Activity )。由于该更改,我现在需要重构我的所有查询,以便仅在状态为 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;

这可能吗?或者我必须明确地编写查询吗?

谢谢

最佳答案

正如您已经发现的那样,或者只是用例 @Where 子句就可以了,但在您的情况下,您也想通过地点和标签过滤 PlaceTag , 因此在这种情况下需要加入。

因此,您可以为 PlaceTag 保留 @Where 子句,而对于 PlaceTags 您需要使用 JPQL 查询:

select pt
from PlaceTag pt
join pt.tag t
join pt.place p
where
t.state='ACTIVE' and p.state='ACTIVE'

至少到 @WhereJoinTable使注释起作用 for many-to-one associations也是。

关于java - ManyToOne 关系上的 Hibernate @Where 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27175845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com