public void persistUnique(List<CdrEntity> cdrs) {
// find all the CDRs in the collection that are already in the DB
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<CdrEntity> query = criteriaBuilder.createQuery(CdrEntity.class);
Root<CdrEntity> cdrRoot = query.from(CdrEntity.class);
query.select(cdrRoot).where(cdrRoot.in(cdrs));
List<CdrEntity> nonUnique = entityManager.createQuery(query).getResultList();
// remove nonUnique elements from crds and persist
...
}
[EL Fine]: sql:...--SELECT SUBINDEX, ... FROM CDRS WHERE ((?, ?, ?, ?) IN ((?, ?, ?, ?), (?, ?, ?, ?), ...))
bind => [null, null, null, null, 2, 1362400759, 19415, 176, ...]
但是,直接在根
上调用.in(...)
似乎没有得到所需的结果。如果直接使用实体是不可能的,我希望有某种表达式
可以表示多个列,然后这些列可以作为调用.(...)
的接收方,但我没有找到任何。
那么,问题是:一个人如何正确地做到这一点呢?还是在JPA中根本不可能?或者只是Eclipselink中存在一个bug?
有趣的尝试,以及生成的奇怪的SQL,SQL看起来左侧正确,但右侧不正确。请记录一个bug,这是一个可以支持的东西。(也可以在2.5开发版本中尝试一下,它可能会起作用)。
JPA Criteria API不支持嵌套数组,因此这超出了JPA规范的范围。
您可以为左侧的id字段创建一个路径表达式列表,并为此使用CriteriaBuilder literal()表达式,它可能会起作用。
带有“in”表达式的JPA标准API转换为多个“OR”而不是“in” e. g. 我的主要模型 多对一关系 在持久性中定义了这两个模型。xml(注意:它没有指定任何db方言) 以下是用于构建查询的带条件API的代码: 这将以以下格式打印查询: 但我应该得到的是 环境: 托梅7.0.3 嵌入式OpenJPA Mariadb 更新: 我也试着添加如下mariadb方言,但没有帮助
我在两个实体< code>A和< code>B之间有< code>@ManyToMany关系,所以Hibernate在数据库中为我创建了一个名为< code>A_B的未映射表,我在java代码中没有相关的实体。此外,我试图使用Criteria API从我的dao中查询那个< code>A_B表。有人能帮我想出一个解决办法吗?我正尝试在< code>Criteria API中做一些类似这个例子的事情
主要内容:标准WHERE示例WHERE子句用于对数据库应用条件并基于该条件获取数据。 在Criteria API中,AbstractQuery接口的)方法用于设置查询条件。 标准WHERE示例 在这里,我们将在表上执行多个操作。假设该表包含以下记录 - 现在,请按照以下步骤执行操作: - 第1步: 创建一个实体类。在包下创建了类文件。 该类包含三个属性:,,以及所有必需的注解。 文件:StudentEntity.java -
此查询用于检索一对多关系中的最后记录(请参阅SQL连接:选择一对多关系中的最后记录) 我的问题是:如何使用jpa criteria api使用subselect构建这个连接?可能吗?如果没有,可以使用jpql吗? 到目前为止我的代码:
尝试编写一个标准api查询。 应该作为参数传递,并且可以更改。我在代码中添加了实体。 感谢任何帮助或指导。 这就是我目前的情况: 我现在能够获取正确的数据,但列表没有排序。这是我在日志中看到的,生成了两个查询,一个有顺序,另一个没有顺序。
我有一个使用构造函数表达式的查询。在大多数情况下,它是工作的,但是我想减少数据库上的查询数量。所以我尝试了FETCH和@EntityGgraph,但是我得到了 org.springframework.dao.InvalidDataAccessResourceUsageException:查询指定的联接提取,但提取关联的所有者不在选择列表中[FromElement{explicit,不是集合联接,提