如何为JPA manyToMany连接添加防护

Oll*_*rds 3 java hibernate jpa

我的JPA测试应用程序跟踪用户在我镇中访问过的酒吧数量.我在用户对象上有这个

@ManyToMany(mappedBy = "users")
private List<Pub> visited;
Run Code Online (Sandbox Code Playgroud)

而pub对象的另一面

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
    joinColumns =
@JoinColumn(name = "pubid"),
inverseJoinColumns =
@JoinColumn(name = "userid"))
protected Set<User> users;
Run Code Online (Sandbox Code Playgroud)

但是,我更新了pub表,其中有一列表明该pub已被关闭.我只希望用户的访问列表包含活动的pubs所以问题是

如何有条件地连接这些对象,以便只有通过测试的pub(例如table.closed = false)才会被放入用户的访问列表中?

我正在使用hibernate和postgres.

Oll*_*rds 6

我已经解决了这个问题暂时使用Hibernate特定的@Where注释.我只需要在用户的pub集合上添加一个额外的注释,如下所示:

@ManyToMany(mappedBy = "users")
@Where(clause="closed='false'")
private List<Pub> visited;
Run Code Online (Sandbox Code Playgroud)

当然我现在已经锁定了Hibernate,这对于这个项目来说不是一个大问题,但如果有人有一个通用的JPA解决方案,我很乐意听到它.