通过 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 查询的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate 4、JPA 2 和 HSQL,无法通过 ID 查询