我的 JPA 测试应用程序跟踪用户在我镇上访问过的酒吧数量。我在用户对象上有这个
@ManyToMany(mappedBy = "users")
private List<Pub> visited;
另一边是酒吧对象
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
joinColumns =
@JoinColumn(name = "pubid"),
inverseJoinColumns =
@JoinColumn(name = "userid"))
protected Set<User> users;
但是,我更新了 pub 表,其中有一列指示该 pub 已关闭。我只希望用户访问过的列表包含活跃的酒吧所以问题是
我如何有条件地加入这些对象,以便只有通过测试(例如 table.closed=false)的酒吧才会被放入用户的访问列表中?
我在底层使用 hibernate 和 postgres。
最佳答案
我暂时使用 Hibernate 特定的 @Where 注释解决了这个问题。我只需要对用户的 pub 集合进行额外注释,如下所示:
@ManyToMany(mappedBy = "users")
@Where(clause="closed='false'")
private List<Pub> visited;
当然,我现在被锁定在 Hibernate 中,这对这个项目来说不是一个大问题,但如果有人有通用的 JPA 解决方案,我很想听听。
关于java - 如何向 JPA manyToMany 连接添加守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052613/