让我们说这些是我的实体:
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
行。我试图通过示例使用查询:
Table3 table3Example = new Table3();
table3Example.setLang("en");
Table2 table2Example = new Table2();
table2Example.setTable3(table3Example);
Table1 table1Example = new Table1();
table1Example.setTable2(table2Example);
table1Repository.findByExample(table1Example);
问题是.findByExample(table1Example)
会返回数据库的所有行,无论lang
是什么,这意味着根本不考虑过滤器:(
任何帮助都将受到赞赏:)
PS:没有抛出异常,.findByExample(table1Example)
只返回所有Table1
行。
答案 0 :(得分:2)
尝试这样的事情:
Query q = entityManager.createQuery("Select o from Table1 o where o.table2.table3.lang = :lang");
q.setParameter("lang", "en");
List<Table1> r = (List<Table1>)q.getResultList();
要了解为什么获得Table1中的所有行,请确保您拥有
<property name="hibernate.show_sql" value="true"/>
在persistence.xml
中,然后观察日志以查看休眠执行的实际选择。