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

How to add a where clause to a Hibernate @ManyToMany relationship?

给定两个实体:

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' 的 purchaseProducts?

我尝试过的事情

曾尝试在 @ManyToMany 注释下方添加以下内容,但均失败,并出现列的 "invalid identifier" 异常:

  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 如何映射此列。

参考: