如何为地图数据类型应用hibernate过滤器?

时间:2012-09-04 08:50:26

标签: hibernate filter annotations

有没有办法在使用注释的类中对地图类型属性应用过滤器?我做了类似下面的事情,但过滤器没有得到应用

public class EntityA
{
@id
@GeneratedValue
@Column(name="id")
private Long id;

@OneToMany(mappedBy="EntityA")
@MapKeyColumn(name = "entityB_id")
@Filter(name = "percentFilter", condition="MODEL_PERCENT> :percent")
private Map<Long, EntityB> entityBMap;
} 

public class EntityB
{
@Column(name = "MODEL_PERCENT")
private BigDecimal modelPercent;

@ManyToOne
@joincolumn(name="entityA_id") 
private EntityA entityA; 
}

但是,如果我将地图属性更改为列表,如下所示,过滤器可以正常工作

@OneToMany(mappedBy="EntityA")
@MapKeyColumn(name = "entityB_id")
@Filter(name = "percentFilter", condition="MODEL_PERCENT> :percent")
private Map<Long, EntityB> entityBMap;

@OneToMany(mappedBy="EntityA")
@JoinColumn(name = "entityA_id")
@Filter(name = "percentFilter", condition="MODEL_PERCENT> :percent")
private List<EntityB> entityBList;

所以我想我需要一些帮助来注释map属性,以便过滤器工作。任何建议或示例代码都会有很大帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您希望将过滤条件应用于关联表,因此,请使用@FilterJoinTable并使用属性名称,而不是数据库列名称:

@OneToMany(mappedBy="EntityA")
@MapKeyColumn(name = "entityB_id")
@FilterJoinTable(name = "percentFilter", condition="modelPercent > :percent")
private Map<Long, EntityB> entityBMap;

检查Hibernate Annotations文档的Filters,你可以找到一个例子。

希望它有所帮助。

修改

不要忘记在Hibernate会话中启用过滤:

session.enableFilter("percentFilter").setParameter("percent", "some-value");