如何在Hibernate @manytomany关系中添加一个条款



给定两个实体:

  • 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注释下方添加以下内容,但两者都失败了列的"无效标识符"例外:

  1. @Where(clause = "status <> 'D'")
  2. @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

相关内容

最新更新