0

注釈を使用してクラスのマップ タイプ属性にフィルタを適用する方法はありますか? 以下のようなことをしましたが、フィルターが適用されていません

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;

したがって、フィルターが機能するようにマップ属性に注釈を付けるには、助けが必要だと思います。提案やサンプルコードは非常に役立ちます。ありがとう。

4

1 に答える 1

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");
于 2012-09-04T09:03:42.223 に答える