hibernate硬编码值注释

hibernate硬编码值注释,hibernate,filter,Hibernate,Filter,我想知道是否有一种方法可以使用硬编码的值来创建过滤器注释。我正在连接两个名为itemRate和ratemaster的表。Rate master具有应用程序rateid和ratekind id的组合键。Rate kind id可以是3个id中的1个(主id、组件id、项目费率) 我的项目费率表了解应用程序并引用两个不同的列Item_Rate和Rate(主要费率) 我的问题是,hibernate有没有办法硬编码一个过滤器,这样当我调用getRate()时,它会过滤所有rate-kind id为0的比

我想知道是否有一种方法可以使用硬编码的值来创建过滤器注释。我正在连接两个名为itemRate和ratemaster的表。Rate master具有应用程序rateid和ratekind id的组合键。Rate kind id可以是3个id中的1个(主id、组件id、项目费率)

我的项目费率表了解应用程序并引用两个不同的列Item_Rate和Rate(主要费率)

我的问题是,hibernate有没有办法硬编码一个过滤器,这样当我调用
getRate()
时,它会过滤所有rate-kind id为0的比率,当我调用
getItemRate()
时,它会过滤所有rate-kind id为2的比率

我尝试过这样做,以获得速率为0:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
    @JoinColumn(name = "CIITM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE"),
    @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION") })
@FilterJoinTable(name = "kindId", condition="RATEKINDID = 0")
public Ciratemaster getRateMaster() {
    return rateMaster;
}
这将获得速率类型为2的速率主控器:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
    @JoinColumn(name = "CIITM_ITEM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE"),
    @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION") })
@FilterJoinTable(name = "kindId", condition="RATEKINDID = 2")
public Ciratemaster getItemRateMaster() {
   return itemRateMaster;
}
我尝试搜索hibernate网站和其他网站,但没有任何效果。我总是会遇到这样的错误,它在不应该的情况下获取了多个结果


提前感谢。

尝试以下方法,而不是使用过滤器:

@org.hibernate.annotations.Where(clause = "RATEKINDID = 2")
编辑:尝试JoinColumnsOrFormula注释:

@JoinColumnsOrFormulas({
  @JoinColumnOrFormula(formula = @JoinFormula(value = "2", referencedColumnName = "RATEKINDID")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION"))
})

请尝试以下操作,而不是使用过滤器:

@org.hibernate.annotations.Where(clause = "RATEKINDID = 2")
编辑:尝试JoinColumnsOrFormula注释:

@JoinColumnsOrFormulas({
  @JoinColumnOrFormula(formula = @JoinFormula(value = "2", referencedColumnName = "RATEKINDID")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION"))
})

我试过了,还尝试了
@org.hibernate.annotations.WhereJoinTable(clause=“RATEKIND=2”)
您能验证实际生成的SQL中没有该子句吗?因为那应该很好用。我还将使用您的数据库验证,使用生成的实际查询确实只有一个结果。显示的查询来自命名查询请求,并且没有与之关联的where子句。命名查询如下所示:
query=entityManager.createNamedQuery(Fciitem.NAMEDQUERY\u findbyaapplicationandaccount)
query.setParameter(Fciitem.NAMEDQUERYPARAMETER\u ACCOUNT,accountNum)
List items=query.getResultList()
另外,显然有一个bug,hibernate无法识别出许多主机上的jointable。您需要打开SQL日志记录并获取生成的确切查询。说查询不显示是因为它来自命名查询没有任何意义。此外,Object.verylongstaticvalue没有定义,也没有任何意义。我试过了,还有
@org.hibernate.annotations.WhereJoinTable(clause=“RATEKIND=2”)
你能验证实际生成的SQL没有该子句吗?因为那应该很好用。我还将使用您的数据库验证,使用生成的实际查询确实只有一个结果。显示的查询来自命名查询请求,并且没有与之关联的where子句。命名查询如下所示:
query=entityManager.createNamedQuery(Fciitem.NAMEDQUERY\u findbyaapplicationandaccount)
query.setParameter(Fciitem.NAMEDQUERYPARAMETER\u ACCOUNT,accountNum)
List items=query.getResultList()
另外,显然有一个bug,hibernate无法识别出许多主机上的jointable。您需要打开SQL日志记录并获取生成的确切查询。说查询不显示是因为它来自命名查询没有任何意义。此外,Object.verylongstaticValue后面没有定义,就没有任何意义。