Допустим, это мои объекты:Hibernate (или нет): запрос на ранее заселена Iterable <Entity>
Table1.java
@Entity
public class Table1 {
// Many to one
private Table2 table2;
// Raw attributes
// ...
}
Table2.java
@Entity
public class Table2 {
// Many to one
private Table3 table3;
// Raw attributes
// ...
}
Таблица3.java
@Entity
public class Table3 {
// Raw attributes
private String lang; // "fr", "en", "de"...
}
Когда я хочу перечислить все Table1
рядов, свойство table2.table3.lang
равно en
, я делаю так:
Query query = entityManager.createQuery("SELECT t1 FROM Table1 t1 WHERE t1.table2.table3.lang = :lang");
query.setParameter("lang", "en");
Тем не менее, как я могу выполнить этот запрос на ранее заселена Iterable<Table1>
? Это возможно? Если не с Hibernate, то с чем? Например, даже если я знаю, что этот код не работает, что-то вроде:
Set<Table1> set = new HashSet<Table1>();
set.add(new Table1(INIT_DEFAULT_VALUES));
set.add(new Table2(INIT_DEFAULT_VALUES));
set.add(new Table3(INIT_DEFAULT_VALUES));
Query query = entityManager.createQuery("SELECT t1 FROM :set t1 WHERE t1.table2.table3.lang = :lang");
query.setParameter("set", set);
query.setParameter("lang", "en");
Для тех, кто задается вопросом, почему мне нужен такой материал, я использую Apache Lucene выполнять поиск доступа пользователей в пределах Table1
строк, предварительно проиндексированных Луценой. Как только я получу некоторые результаты, я должен предложить некоторые фильтры/сортировки в возвращаемом списке, например. выбирая язык связанного объекта Table3
.
Любое предложение будет оценено :)
Спасибо! Я попробую с предложением 'IN'. – sp00m