Tag: criteria api

如何在某些单元格上使用CriteriaQuery SUM自定义操作?

考虑你有表T,字段A和B. 使用常规SQL,我可以这样做: SELECT SUM(A * (100.0 – B) / 100.0) AS D FROM T; 而且我会得到我所期望的。 但是,我不确定如何使用CriteriaQuery。 我知道如何对1个字段求和,但不知道如何在一行中的多个字段上对某些数学表达式求和。

Eclipselink扩展了JOIN子句

目前的代码: CriteriaQuery criteriaQuery = cb.createQuery(MinutisPreke.class); Root from = criteriaQuery.from(MinutisPreke.class); Join ld = from.join(“lankomumasDiena”, JoinType.LEFT); cb.and(cb.equal(ld.get(“intervalas”), 7)); 生成以下查询: SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id = t0.pr_id) WHERE (t1.intervalas = 7) 如何使用条件查询在LEFT OUTER JOIN ON子句中添加语句,以便我的代码生成此查询: SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id […]

为什么编译器无法识别元模型属性?

java se 6项目是否支持eclipselink jpa2的标准api? 如果没有,那就是我的问题。 我是否需要在persistence.xml中为条件api指定任何特殊内容? 这是我的标准查询: final EntityType Meaning_ = em.getMetamodel().entity(Meaning.class); final CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Integer.class); final Root meng = cq.from(Meaning.class); cq.where(meng.get(Meaning_.lastPublishedDate)); //this attributes are not recognized/found cq.select(meng.get(Meaning_.objId)); // ” ” TypedQuery q = em.createQuery(cq); return q.getResultList(); 这是我的意义实体: @Entity public class Meaning implements Serializable{ private static final long serialVersionUID = […]

JPA Criteria使用单表inheritance查询实体层次结构

说我有以下实体: @Entity @Inheritance(strategy = SINGLE_TABLE) @DiscriminatorColumn(name = “type”) public abstract class BaseEntity { private Date someDate; private Date otherDate; private boolean flag; } @Entity @DiscriminatorValue(“entity1”) public class Entity1 extends BaseEntity { private String someProperty; } @Entity @DiscriminatorValue(“entity2”) public class Entity2 extends BaseEntity { private String otherProperty; } 我正在尝试构建一个条件查询,该查询根据BaseEntity和两个子类中的属性返回BaseEntity实例。 所以基本上我正在寻找与这个伪SQL相对应的标准查询: SELECT * FROM WHERE someDate ? […]

在JPA 2 Criteria API中选择DISTINCT + ORDER BY

我有一个类Lawsuit ,它包含一个List ,每个都有一个Date属性。 我需要选择在Hearing日期之前订购的所有Lawsuit 我有一个CriteriaQuery之类的 CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Lawsuit.class); Root root = cq.from(Lawsuit.class); 我使用distinct来展平结果: cq.select(root).distinct(true); 然后我加入 Lawsuit与Hearing Join hearing = root.join(“hearings”, JoinType.INNER); 创建Predicate predicateList.add(cb.isNotNull(hearing.get(“date”))); 和Order s: orderList.add(cb.asc(hearing.get(“date”))); 如果我避免使用它,一切正常,但如果我使用它,它会抱怨无法根据SELECT中没有的字段进行排序: 引起:org.postgresql.util.PSQLException:错误:对于SELECT DISTINCT , ORDER BY表达式必须出现在选择列表中 List已经可以通过返回的Lawsuit类访问,所以我很困惑:我应该如何将它们添加到选择列表中?

使用Criteria API进行动态JPA 2.0查询

我使用JPA 2.0的CriteriaBuilder构建动态查询有点困难。 我猜有一个很常见的用例:用户提供任意数量的搜索参数X和/或连接:如: select e from Foo where (name = X1 or name = X2 .. or name = Xn ) 方法或CriteriaBuilder不是动态的: 谓词或(谓词……限制) 想法? 样品?

JPA标准谓词条件

我有以下代码片段用于构建条件构建器where条件。 想知道是否有任何方法可以使这更好,因为我会有更多的条件和相同的条件将用于获取记录的数量。 任何见解都非常值得赞赏 private List getProducts(MultivaluedMap params) throws JSONException { CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Product.class); Root root = criteriaQuery.from(Product.class); List p = new ArrayList (); Predicate prodIdPredicate, prodNamePredicate; JSONObject inputJSON = new JSONObject(params); if (inputJSON.isNull(“filter”) == false) { JSONObject filter = inputJSON.getJSONObject(“filter”); JSONArray filters = filter.getJSONArray(“filters”); for (int i = 0; i […]

JPA 2 – 在CriteriaQuery中使用@ElementCollection

@Entity public class Person { @ElementCollection private List locations; […] } @Embeddable public class Location { private Integer dummy; private Date creationDate; […] } 鉴于以下结构,我想执行以下SQL的HQL或CriteriaQuery等价物: SELECT l.* FROM Location l INNER JOIN Person p ON (p.id = l.person_id) WHERE p.id = ? AND l.creationDate > ? 我想找回与给定人员相关联的位置列表,其创建日期在给定人员之后。 提前致谢! 标记 编辑***:我编辑了SQL,因为它有点误导。 我不想独立查询位置。

JPA命名查询与标准API?

是否有针对Criteria API和NamedQuery之间决策的启发式/最佳实践/规则集? 到目前为止我的想法: 命名查询通常更具可读性。 条件查询更灵活。 两者都是预编译的。 我倾向于尽可能长时间地使用命名查询,然后更改为条件。 但是,通过使用标准API来“灵活”查询的冲动可能暗示了次优设计(即关注点的分离)? 谢谢

HQL或Criteria中的CASE语句

从这个问题派生出来,是否可以将HQL或Criteria用于以下SQL语句: SELECT e.type, count(e), count(d), count (case when gender = ‘male’ then 1 else NULL end) AS NumberOfMaleEmployees from Department d JOIN d.employees e WHERE e.dead = ‘maybe’ GROUP BY e.type 虽然谷歌提出了一些HQL支持CASE语句的命中,但Hibernate 3.6.6失败了 QuerySyntaxException:意外令牌:CASE 当我在EntityManager实例上创建上面的查询时。 为每个e.type创建另一个查询来手动确定男性的数量,例如对于每个e.type,这有多糟糕。 SELECT count(e), from Department d JOIN d.employees e WHERE e.dead = ‘maybe’, e.type = ugly 由于可能有很多类型,这可能很慢。 我想数据库为我做的工作。