当前位置: 首页 > 知识库问答 >
问题:

JPA2标准-API:选择...在(从哪里选择)

元英朗
2023-03-14

我有以下数据库模型

A
aId

AB
aId
bId

B
bId
status

在Spring数据规范中,当B.status为'X'时,我想返回A的实例。JPQL代码如下:

select a from A a where a in
     (select ab.id.a from AB ab where ab.id.b.status= :status)

这些是模型类:

@Entity
public class A {
     private Long aId;

     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "id.a")
     private Set<AB> ab;
}

@Entity
public class B {
     private Long bId;
     private String Status;

     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "id.b")
     private Set<AB> ab;
}

@Entity
public class AB {
     private ABPK id;
}

public class ABPK {
     @ManyToOne
     @JoinColumn(name="aId")
     private A a;

     @ManyToOne
     @JoinColumn(name="bId")
     private B b;
}

Spring规范中的JPA标准是什么?

public class ASpecifications {
     public static Specification<A> test(final String status) {
          return new Specification<Party>() {
          @Override
          public Predicate toPredicate(Root<A> a, CriteriaQuery<?> query, CriteriaBuilder cb) {
            return null;
          }
        };
     }
}

共有3个答案

何越
2023-03-14

我想您想选择“A实体来自AB实体,其中B为提供状态”:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<AB> ab = cq.from(AB.class);
cq.select(ab.get("id").get("a"));
cq.where(cb.equal(ab.get("id").get("b.status"), status));
鲁靖
2023-03-14

在之前的一篇文章中包含了一些很好的例子,它们准确地解决了你在这里试图完成的事情:jpa-2-0-criteria-api-subqueries-in-expressions。

欧阳鸿德
2023-03-14

返回using Criteria API实例的规范如下:

public class ASpecifications {
     public static Specification<A> test(final String status) {
          return new Specification<Party>() {
          @Override
          public Predicate toPredicate(Root<A> a, CriteriaQuery<?> query, CriteriaBuilder cb) {
            Subquery<A> sq = query.subquery(A.class);
            Root<AB> ab = sq.from(AB.class);
            sq.select(ab.get(AB_.id).get(ABPK_.a));
            sq.where(cb.equal(ab.get(AB_.id).get(ABPK_.b).get(B_.status), status));

            Predicate p = cb.in(a).value(sq);
            return cb.and(p);
          }
        };
     }
}
 类似资料:
  • 问题内容: 有人可以将下面的代码重写为准备好的语句吗? 我正在尝试学习准备好的语句,但是从搜索时发现的许多示例中很难理解它的工作原理。我希望,如果我看到一些我熟悉的代码,可以将其重写为一条准备好的语句,它可能会点击我。请不要使用PDO,就我目前的知识水平而言,这太让我感到困惑了。谢谢。 问题答案: 您好ButterDog让我逐步引导您完成PDO。 步骤1) 创建一个名为connect.php的文件

  • 问题内容: 以下是在SQL中达到其结果的最有效的方法: 可以更好地使用联接并达到相同的结果吗? 问题答案: 您可能更喜欢使用a而不是的原因之一是,如果子句中的Values包含any,您将永远不会获得任何结果。如果确实要使用,请记住要始终考虑子查询是否可能带回NULL值! RE:评论中的问题 ‘x’NOT IN(NULL,’a’,’b’) ≧ ‘x’<> NULL和’x’<>’a’和’x’<>’b’

  • 问题内容: 可以在mongo db中像在SQL中那样选择集合的文档: 还是如果我有一个我必须一个一个地选择,然后重新组合结果? 问题答案: 简单 :) 摘自:http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 使用数组的MySQL查询将数组 传递给mysql 我在PHP中有一个数组: 正如你所看到的,我有不同的值的数组,但我想要写一个MYSQL语句,将检查,如果是 等于 任何数组中的值。例如,如果某行的值为1,则将返回该行,与4、5和7相同。数组的长度可能会因程序的性质而异,这就是问题所在。我可以做: 或者,还有更好的方法? 如果我不

  • 我有以下SQL语句,它从数据库中选择公司(存储lat/lng),并显示离客户位置最近的5个位置。这是完美的工作: $query=sprintf(“选择公司名称、地址、电话、传真、联系人、电子邮件、网站、url、纬度、经度,(1.609344*3959*acos(弧度(“$center\u lat”)*cos(弧度(纬度))*cos(弧度(经度)-弧度(“$center\u lng”))sin(弧度

  • 我正在尝试实现如下查询: 使用Hibernate标准API。我需要对整个C表有不同的结果,而不仅仅是其中的某些列。 我试着那样做: 像这样: (不过我看不出有什么不同)。尝试广告结果变压器: 尝试将所有colum放入ProjectsList,然后: 但是该投影只将“不同”关键字添加到列表中的第一列,而不是整个表。 我想要实现的是这样的目标: 但我只能在这里添加一列,不能像查询一样使用通配符。 任何