hibernate硬编码值注释
我想知道是否有一种方法可以使用硬编码的值来创建过滤器注释。我正在连接两个名为itemRate和ratemaster的表。Rate master具有应用程序rateid和ratekind id的组合键。Rate kind id可以是3个id中的1个(主id、组件id、项目费率) 我的项目费率表了解应用程序并引用两个不同的列Item_Rate和Rate(主要费率) 我的问题是,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的比
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后面没有定义,就没有任何意义。