通过 JPA 查询

Posted

技术标签:

【中文标题】通过 JPA 查询【英文标题】:Querying through JPA 【发布时间】:2018-02-20 13:28:40 【问题描述】:

我有一个关于通过 JPA 获取数据的问题,

假设我有一个实体,并且该实体与其他相关实体具有 OnetoOne 关系以及 OneToMany。

在 Hibernate 或 JPA 中是否有任何 API,如果我为 Entity 类和相关实体类设置少量值,我会得到与这些值匹配的 Entity 类列表。

例如:

Entity e = new Entity();
e.setVar1("Test1");
e.setVar2("Test2");

SiblingEntity se = new SiblingEntity(); // OnetoOne with Entity class
se.setVar1("Var1");

e.setSiblingEntity(se);

ChildEntity ce = new ChildEntity(); // OnetoMany with Entity class
ce.setVar1("value1");

e.getChildEntities().add(ce);

现在我们有了一个带有兄弟实体和子实体的根实体 e。

是否有任何 API 可以为我提供以下结果?就像下面提到的那样:

List elist = entityDAO.getEntityList(e);

elist 必须包含满足我们上面提到的条件的实体类列表。

谢谢

【问题讨论】:

【参考方案1】:

您想要一种示例查询,我不知道有一个框架可以用 JPA 做到这一点,但是 JQL 可以在您完成作业时非常简单地表达:

entityManager.createQuery(
   "select e from Entity e where e.var1 = 'Test1' 
    and e.var2 = 'Test2' and e.siblingEntity.var1 = 'Var1' 
    and e.childEntity.var1 = 'value1'").getResultList();

如果实体关系定义正确,应该交付你想要的。

搜索 QBE 和 JPA 我发现以下链接:

hibernate-query-example-qbe

也许那是根据你的意图。

【讨论】:

感谢@aschoerk 的快速回复,但我想不要为此写任何查询。 在不使用查询的情况下,API 应该智能地识别我们传递的分离实体中的非空值,在这些实体之间进行 fetch join 并返回根实体列表。 非常感谢@aschoerk,这正是我想要的

以上是关于通过 JPA 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JPA 查询按子类实体值获取父实体?

Spring Data JPA:通过示例查询?

通过 JPA 标准查询从 SQL 视图获取列表时出错

Hibernate 4、JPA 2 和 HSQL,无法通过 ID 查询

如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的本机 SQL 查询?

Spring Data JPA 通过查询从实体获取投影