假设这些是我的实体:
表1.java
@Entity
public class Table1 {
// Many to one
private Table2 table2;
// Raw attributes
// ...
}
表2.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
行之前也由 Lucene 索引。一旦我得到一些结果,我必须在返回的列表上提出一些过滤器/排序,例如选择链接Table3
实体的语言。
任何建议将不胜感激:)