- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试动态构造查询,我的下一个目标是添加 JOIN 子句(我不知道如何使用 API)。
例如,现在这段代码对我有用:
...
Class baseClass;
...
CriteriaBuilder cb = JpaHandle.get().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(this.baseClass);
Root entity_ = cq.from(this.baseClass);
Predicate restrictions = null;
...
restrictions = cb.conjunction();
restrictions = cb.and(restrictions, entity_.get("id").in(this.listId));
...
cq.where(restrictions);
...
Query qry = JpaHandle.get().createQuery(cq);
(注意:JpaHandle 来自 wicket-JPA 实现)
我的愿望是添加 JOIN 子句(尽可能通用)!
我在类(this.baseClass)中有特定的注释
例如:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assay_id", nullable = false)
那么,在标准 JPA 中是否有类似的方法? (注意:这不能编译)
这是一个实际失败的方法:
...
Join<Experiment,Assay> experimentAssays = entity_.join( entity_.get("assay_id") );
或者像这样:
...
CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
Root<Customer> c = q.from(Customer.class);
SetJoin<Customer, PurchaseOrder> o = c.join(Customer_.orders);
对我来说,如果它能尽可能更通用,那就太好了......:
...
Join joinClause = entity_join(entity_.get("assay_id"), entity2_.get("id"));
当然,我在类(this.baseClass)中有特定的注释
感谢您的宝贵时间。我将不胜感激各种评论!
最佳答案
也许以下摘录自 Chapter 23 - Using the Criteria API to Create Queries Java EE 6 教程的部分内容将带来一些启发(实际上,我建议阅读整个第 23 章):
Querying Relationships Using Joins
For queries that navigate to related entity classes, the query must define a join to the related entity by calling one of the
From.join
methods on the query root object, or anotherjoin
object. The join methods are similar to theJOIN
keyword in JPQL.The target of the join uses the Metamodel class of type
EntityType<T>
to specify the persistent field or property of the joined entity.The join methods return an object of type
Join<X, Y>
, whereX
is the source entity andY
is the target of the join.Example 23-10 Joining a Query
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
Join<Pet, Owner> owner = pet.join(Pet_.owners);Joins can be chained together to navigate to related entities of the target entity without having to create a
Join<X, Y>
instance for each join.Example 23-11 Chaining Joins Together in a Query
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
EntityType<Owner> Owner_ = m.entity(Owner.class);
Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = cq.join(Pet_.owners).join(Owner_.addresses);
话虽这么说,我还有一些补充说明:
首先,在代码中添加以下行:
Root entity_ = cq.from(this.baseClass);
让我觉得你不知何故错过了静态元模型类部分。元模型类,例如 Pet_
在引用的示例中用于描述持久类的元信息。它们通常是使用注释处理器(规范元模型类)生成的,或者可以由开发人员编写(非规范元模型)。但你的语法看起来很奇怪,我认为你正在尝试模仿你错过的东西。
第二,我真的认为你应该忘记这个assay_id
外键,你在这里走错路了。您确实需要开始考虑对象和关联,而不是表和列。
第三,我不太确定通过添加尽可能通用的 JOIN 子句来准确理解您的意思以及您的对象模型是什么样子,因为您没有提供它(请参阅上一点)。因此不可能更准确地回答您的问题。
总而言之,我认为您需要阅读更多有关 JPA 2.0 Criteria 和 Metamodel API 的内容,我强烈推荐以下资源作为起点。
关于java - JPA Criteria API - 如何添加 JOIN 子句(尽可能通用的句子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61812890/
我需要创建一个 Hibernate 标准限制,或者 3 个条件。问题是最后一个条件实际上是使用 AND 运算符的条件。 我的第一个条件: Criterion startInRange = Restri
假设我的类型为 User,其中包含带有属性 Name 的类 Tenant 的对象。 我想从数据库用户中选择,其租户包含给定名称。 在 Hibernate Criteria 中,我可以使用别名简单地实现
select (case when dob = '2020-02-03' then 'adult' else 'teenage' end) as Age
我正在使用 Java 中的 hibernate 条件进行 MySql 查询。我在下面给出了我的代码的小快照。 Criteria criteria = getCurrentSession
我正在尝试使用条件查询进行删除。但看起来不错,但在运行时显示错误。我收到如下错误: Caused by: java.lang.AbstractMethodError: org.hibernate.ej
我目前正在尝试实现半边折叠以执行增量重新网格化。我正在处理流形网格。考虑以下简单网格: 目标是将 a 折叠成 b。 然而,在这种情况下,这会导致非流形网格 我想阻止。我的问题是: 我怎样才能提前做到这
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在考虑为我的应用使用 Firebase Analytics。我很好奇: 保留的标准是什么?保留是否跟踪具有我必须发送的唯一 ID 或唯一设备的用户帐户? 如果用户从多个设备登录到我的应用程序,我将
我想测试一个“withCriteria”闭包,但不知道如何去做。我看到了如何模拟 withCriteria 调用,但没有测试闭包中的代码。在运行执行“withCriteria”的测试时,我不断收到 M
如何从以下 sql 创建 Hibernate 条件查询? String hql = "select e.employeeId,m.meetingId,e.firstname from Employee
我担心我可能已经表达了我的previous question很糟糕,所以为了清楚起见,我重新开始。 想象许多表,每个表之间存在 OneToMany 关联; 农场 -> 田地 -> RegionGrou
我将如何使用条件 API 执行以下 Hibernate 查询。我有一个对象 Parent 和 List Children。我想搜索所有 parent 并找到哪些 parent 包含指定的 child
我正在使用 Oracle,目前无法实现我需要的查询。 假设我有下表: - ID Date Type Value - 1 01/12/2016 prod 1 - 2
有没有办法用 JPA 2 CriteriaBuilder 编写与以下查询等效的内容? select * from season s1 where end = ( select max(end)
背景 我们定期对多个项目进行测试,并产生测试结果(通过或失败)。单个测试可以应用于多个项目,单个项目可以对其进行多个不同的测试。 我们需要做的是生成当前未通过测试的所有项目/测试组合的列表,以及自上次
SQL: String hql1 = "SELECT /* PARALLEL(MVR,16) PARALLEL(MVRS,16)*/ * FROM ICM MINUS SELECT I1.* FRO
为什么这是不可能的? Criteria crit1 = sess.createCriteria(Criteria1Class.class); Criteria crit2 = crit1.creat
我通常在 hibernate 状态下使用 criteria.addOrder(Order.desc("myField")); 如何在不使用 hsql 的情况下在 Hibernate 中编写此语句? s
假设我有一个具有以下值的表 Plan。 planName(VARCHAR2) | validFrom(timestamp) | validTo(timestamp) -----------------
给定映射的 hibernate 类: @Entity public class MyTestClass { /* id and stuff */ private Integer aValue;
我是一名优秀的程序员,十分优秀!