给定两个实体:
-
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
下面添加以下内容注释,但都因列的“无效标识符”异常而失败:
-
@Where(clause = "status <> 'D'")
-
@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 如何映射此列。
关于oracle - 如何向 Hibernate @ManyToMany 关系添加 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47673252/