- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 SpringBoot 1.5.9 的项目(无法更改版本)。
我有这些实体:
@Entity
@Table(name = "data")
public class DataEntity extends Timestampable {
@Column(name = "value")
private String value;
@Column(name = "data_timestamp")
private ZonedDateTime dataTimestamp;
@ManyToOne
@JoinColumn
private DataTypeEntity type;
@ManyToOne
@JoinColumn
private AssetEntity asset;
}
@Entity
@Table(name = "data_type")
public class DataTypeEntity extends Timestampable {
@Column(name = "name", unique = true)
private String name;
...
}
我有这个有效的 SQL 查询(在 PostgreSQL 下),用于检索每个 Assets 的最新数据 ( source ):
SELECT * FROM data d1
JOIN (
SELECT max(data_timestamp) as newest, asset_id FROM data
GROUP BY asset_id
) d2
ON d1.data_timestamp = d2.newest AND d1.asset_id = d2.asset_id
WHERE d1.type_id IN (
SELECT id FROM data_type
WHERE name = 'ELECTRICITY_CONSUMPTION'
);
我想将此查询转换为 JPA CriteriaQuery。有没有办法做到这一点,或者我是否需要在特定实体上使用 @SubSelect 注释?
感谢您阅读本文!
(丑陋的)解决方案
我最终使用了带有 SubSelect 的数据库 View 。我已将 DataEntity 分成 2 个实体:
基类:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractDataEntity extends Timestampable {
@Column(name = "value")
protected String value;
...
}
操纵类:
@Entity
@SequenceGenerator(name = "idgen", sequenceName = "data_seq")
@Table(name = "data")
@DiscriminatorValue("DataEntity")
public class DataEntity extends AbstractDataEntity {
@Override
public DataEntity setValue(String value) {
super.setValue(value);
return this;
}
...
}
查看类:
@Entity
@Immutable
@SequenceGenerator(name = "idgen", sequenceName = "view_data_last_seq")
@DiscriminatorValue("LastDataView")
@Subselect(
"SELECT * FROM data d1 " +
"JOIN ( " +
" SELECT max(d.data_timestamp) as newest, d.asset_id, d.type_id FROM data d " +
" WHERE d.parameter_id IS NULL " +
" GROUP BY d.asset_id, d.type_id" +
") d2 " +
"ON d1.data_timestamp = d2.newest " +
" AND d1.asset_id = d2.asset_id " +
" AND d1.type_id = d2.type_id"
)
public class LastDataView extends AbstractDataEntity {
}
即使我觉得这个解决方案很丑,它也可能对其他人有帮助!
最佳答案
JPQL does not support FROM
或 JOIN
上的子查询。仅在 WHERE
或 HAVING
子句中。 Eclipse 链接,starting from 2.4 ,支持 FROM
子句上的子查询。
如every Criteria is converted to the JPQL ,不可能使用 Criteria 来完成您想要的操作。
关于java - JPA CriteriaQuery 查询每个实体的最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53155163/
目前,我有一个UserDao使用 CriteriaQuery 创建查询的类,例如检索 User 的实例使用其 ID 从数据库中获取(我们将该方法称为 findById )。到目前为止,它非常简单并且运
大家好,我正在 CriteriaQuery 中尝试执行此操作,我搜索了很长时间,但找不到任何可以执行此操作的方法,有人可以帮助我吗? SELECT b.name FROM Empl a LEFT OU
我知道我们可以使用 query.setHint("org.hibernate.cacheable", true) 为查询设置 hibernate 缓存,如下例所示。但是,有谁知道有什么方法可以为 Cr
示例实体: @Entity public class Employee { @Id @Column(name="EMP_ID") private long id; ..
我有 3 个有问题的表:PrblFldr --> PrblFldrAtrbtVal --> PrblTmpltAtrbt。它们之间的关系分别是“一对多”和“多对一”。 我正在使用 CriteriaBu
我有一个非常基本的问题,但找不到正确的解决方案。我想使用仅引用 JPAEntity 类的 CriteriaQuery 读取 JPAEntity 的所有记录,它应该适用于不同的 JPAEntites。
当我尝试使用 CriteriaQuery 排序数据时,它会忽略所有空值和特殊字符,例如 '-' 。这是我的代码: if ( "radical".equals((String) params.get("
我的 CriteriaQuery 仅返回一条记录,dateFrom = '2019-12-10' 和 dateTo = '2019-12-20' 应该返回两条记录我也不知道为什么。 这是我从数据库中截
谁能给我一些关于如何将这种子查询放入 CriteriaQuery 的提示? (我正在使用 JPA 2.0 - Hibernate 4.x) SELECT a, b, c FROM tableA WHE
我有一个表,其中包含它指向的实体的条形码的字符串值。不幸的是,它不是外键,它只是一个字符串,因此不存在映射。这使得连接操作变得困难。我想知道如何将这个对象连接到另一个没有定义关系的表。例如: @Ent
我有以下 EJB 结构。不要好奇Animal和Inventory,这些类在这里只是为了简化结构演示(更新:我修改了类名来构造一个更好理解的示例。IdTag 的另一个实现可能是 BarcodeId)。请
我想从数据库中获取一列之和并按两个字段分组的数据,其中参数将是动态的 我尝试使用谓词来实现,我能够获得分组依据,但总和不起作用。 Page aggregatedPaymentDetails2 = pa
假设我在 Oracle DB 中有一个列,如下所示: 带有时区的SOMETHING_TS TIMESTAMP 我想使用 CriteriaQuery 按此列进行过滤。 我可以使用 native 查询来实
我正在尝试对 JpaRepository 返回的列表进行排序。我正在使用 Specification 类而不是 @Query 注释,并且根据 this question ,我应该使用 Criteria
我有 2 个实体:Project 和 ProjectStatus。 项目实体: @Entity public class Project { @Id @GeneratedValue(s
我有一个具有 CLOB 属性的实体: public class EntityS { ... @Lob private String description; } 为了从数据库中检索某些实体
我有一个使用 SpringBoot 1.5.9 的项目(无法更改版本)。 我有这些实体: @Entity @Table(name = "data") public class DataEntity e
我有两个实体类一: @Table(name = "package") public class Package { @Id @Column(name = "package_id", i
我正在使用 JPA 和 PostgreSQL,我想创建一个 CriteriaQuery 并创建一个查询不考虑重音的地方。 例子:如果我搜索字母“a”,数据库应该返回值“ã”、“a”、“á”等。这应该发
如何使用条件查询应用左连接,我只能在互联网上找到内部连接条件。 Criteria cr = this.sessionFactory.getCurrentSession().create
我是一名优秀的程序员,十分优秀!