给定两个实体:
-
PurchaseProductGroup
-
PurchaseProduct
,它具有status
列,该列可以是'A'
(Active)或'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'")
,但这似乎并不影响关系收集的内容 - 正如这个问题所支持的。
请尝试以下代码:
@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如何映射此列。
参考:休眠注释。@where vs @wherejointable