Фильтрация коллекции с использованием аннотации @Filter hibernate в java - PullRequest
5 голосов
/ 18 октября 2011

У меня есть две спящие карты A и B.

A имеет 2 коллекции сущности B, и я хотел бы отфильтровать каждую коллекцию на основе свойства, хранящегося в B (как показано в коде ниже).

@FilterDefs()
class A{

@OneToMany(mappedBy = "productType", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Filter(name = "something", condition = "entityType = 'SKU1'")  
Set<B> set1 = new HashSet<B>();

@OneToMany(mappedBy = "productType", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Filter(name = "something", condition = "entityType = 'SKU2'")  
Set<B> set2 = new HashSet<B>();

 }

class B{

@ManyToOne(cascade = CascadeType.ALL)
private A productType;

@Column(name = "entity_type")
@Enumerated(EnumType.STRING)
private EntityType entityType;
}

Отредактировано: Я включаю фильтры, как предложено ниже в моем методе DAO. Однако я получаю следующее исключение

org.hibernate.exception.SQLGrammarException: не удалось инициализировать коллекция

Если я использую метод быстрой загрузки, я получаю исключение, связанное с генерированием недействительного SQL?

Есть указатели?

Ответы [ 2 ]

6 голосов
/ 06 марта 2013

Я использую FilterDef в Entity, а затем устанавливаю, в каких коллекциях я хочу использовать фильтр. В вашем примере:

class A{
@OneToMany(...)
@Filter(name = "filterName")  
Set<B> set2 = new HashSet<B>();
}

@FilterDef(name = "filterName", 
    defaultCondition = condition,
    parameters = {@ParamDef(name = nameParameter,
    type = typeParameter)})
class B{
}

Тогда, как сказал ssedano, вы должны включить фильтр в сеансе:

session.enableFilter("filterName")

И поставить параметры, если это так:

session.getEnabledFilter(filterName).setParameter(nameParameter,value);
0 голосов
/ 18 октября 2011

Вы должны включить фильтр в DAO.

session.enableFilter("something");

Перед извлечением объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...