java - 如何向 JPA manyToMany 连接添加守卫

标签 java hibernate jpa

我的 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/

相关文章:

java - Groovy XML Slurping 的速度

Java:Hibernate - 查询以从多个表中删除

java - 为什么 ormlite 有自己的注释?

java - JPA OneToMany 索引丢失

java - 使用泛型和 jpa EntityManager 方法

java - 单元测试 App 引擎 - Eclipse - Maven

java - Finalize block 的问题

java - 阅读直到带有套接字的标记的最佳实践(Java)?

java - 抛出操作数的子句中的 Spring JPA 应包含 1 列

java - 如何在 Intellij IDEA 运行之前启用 Hibernate 字节码检测?