oracle - 如何向 Hibernate @ManyToMany 关系添加 where 子句?

标签 oracle hibernate many-to-many join hibernate-filters

给定两个实体:

  • PurchaseProductGroup
  • PurchaseProduct ,其中有 status列可以是 'A' (活跃)或'D' (已删除)

以及 PurchaseProductGroup 中定义的多对多关系:

/** The purchase products linked to this group. */
@ManyToMany
@JoinTable(name = "purchaseprodgrp_purchaseprod",
           joinColumns = @JoinColumn(name = "ppg_id"),
           inverseJoinColumns = @JoinColumn(name = "ppr_id"))
private List<PurchaseProduct> purchaseProducts;

我如何限制这一点,以便购买状态为 'D' 的产品被排除在外?

我尝试过的事情

已尝试在 @ManyToMany 下面添加以下内容注释,但都因列的“无效标识符”异常而失败:

  1. @Where(clause = "status <> 'D'")
  2. @WhereJoinTable(clause = "purchaseProduct.status <> 'D'")

还尝试使用添加 @Where(clause = "status <> 'D'")在实体级别,但这似乎并不影响关系集合的内容 - 正如 this question 支持的.

最佳答案

请尝试以下代码:

@ManyToMany
@JoinTable(name = "purchaseprodgrp_purchaseprod",
       joinColumns = @JoinColumn(name = "ppg_id"),
       inverseJoinColumns = @JoinColumn(name = "ppr_id"))
@Where(clause = "ppr_status <> 'D'")
private List<PurchaseProduct> purchaseProducts;

这可能与您之前尝试过的类似,但使其正常工作的关键点是 ppr_status 是实际的列名称。因此 PurchaseProduct 实体应具有以下内容:

@Column(name="ppr_status")
public String getStatus() {
    return status;
}

如果您已将字段命名为 ppr_status,则可能不需要 @Column。但根据您上面的评论,我们需要告诉 Hibernate 如何映射此列。

引用:Hibernate annotations. @Where vs @WhereJoinTable

关于oracle - 如何向 Hibernate @ManyToMany 关系添加 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47673252/

相关文章:

entity-framework - 如何使用 Entity Framework 为多对多关系表添加条目

mysql - Laravel 5.3 查询 - 具有投票总和的不同结果

oracle - 如何使用SQLPLUS在命令行中将参数传递给PL/SQL脚本?

java - 当键的一个元素是实体时,如何在 JPA 中声明复合键?

java - 如何解决java.lang.NoClassDefFoundError : javax/annotation/Generated?

java - hibernate 保存并使用相同的 session ,相同的事务

NHibernate:实现多对多关系

oracle - 对 View 使用提示?

oracle - PL/SQL 编译失败,没有错误信息

sql - 获取ORACLE中每个数字的最新记录