比方說,那些都是我的實體:休眠(或沒有):查詢在先前填充可迭代<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
// ...
}
Table3.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
行,之前也是由Lucene索引的。一旦我得到了一些結果,我必須在返回的列表上提出一些過濾器/排序,例如選擇鏈接的Table3
實體的lang。
任何建議,將不勝感激:)
謝謝!我會嘗試使用'IN'子句。 – sp00m