gpt4 book ai didi

java - Hibernate:通过示例和多对一关系进行查询

转载 作者:行者123 更新时间:2023-12-02 07:45:35 25 4
gpt4 key购买 nike

假设这些是我的实体:

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"...

}

我想列出 Table1table2.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 行。

最佳答案

尝试这样的事情:

    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 中,然后观察日志以查看 hibernate 执行的实际选择。

关于java - Hibernate:通过示例和多对一关系进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com