2012-11-16 40 views
1

我想知道是否有一种方法来使用硬编码值的过滤器注释。我加入了两个名为itemRate和ratemaster的表。费率主人有应用程序rateid和ratekind id的组合键。费率种类ID可以是3个ID中的1个(主要,组件,项目费率)。休眠硬编码值注释

我的产品费率表知道的应用和使用Hibernate进行硬编码引用两个不同的列item_rate和速率(这是主要率),

我的问题是,有没有办法过滤器,所以当我打电话getRate()它会过滤速率种类ID为0的所有速率,当我拨打getItemRate()时,它会过滤速率种类为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网站和其他网站,没有真正的工作。我总是拿出错误,它取得超过1个结果时,它不应该

在此先感谢。

回答

1

试试这个过滤器:

@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")) 
}) 
+0

我试过了,也 '@ org.hibernate.annotations.WhereJoinTable(条款=“RATEKIND = 2“)' – locus2k

+0

您可以验证实际正在生成的SQL没有该子句吗?因为这应该工作得很好。我还会用你的数据库验证,使用正在生成的实际查询,真的只有一个结果。 –

+0

显示的查询来自命名的查询请求,并且没有与其关联的where子句。命名查询是这样的: '查询= entityManager.createNamedQuery(Fciitem.NAMEDQUERY_FINDBYAPPLICATIONANDACCOUNT);'' query.setParameter(Fciitem.NAMEDQUERYPARAMETER_ACCOUNT,accountNum);'' 名单项目= query.getResultList();' – locus2k