我有以下数据库模型:
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;
}
};
}
}
我想您想选择“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));
在之前的一篇文章中包含了一些很好的例子,它们准确地解决了你在这里试图完成的事情:jpa-2-0-criteria-api-subqueries-in-expressions。
返回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,然后: 但是该投影只将“不同”关键字添加到列表中的第一列,而不是整个表。 我想要实现的是这样的目标: 但我只能在这里添加一列,不能像查询一样使用通配符。 任何