如何使用jpa和hibernate将本机查询映射到POJO类

我在我的项目中使用JPA和hibernate。

我创建了一个查询,其中我在许多表上进行了连接操作。 所以我创建了一个原生的。 我得到的结果是在object []列表中,但我希望结果自动转换为java POJO类 。 您可以在下面查看查询语法和POJO java类。

JPA查询

@Query(value = "SELECT obsp.Identifier, obs.phenomenontimestart, nv.value " + "From Series s " + "INNER JOIN Featureofinterest fi on s.featureofinterestid = fi.featureofinterestid " + "INNER JOIN ObservableProperty obsp on s.observablepropertyid = obsp.ObservablePropertyId " + "INNER JOIN Observation obs on s.seriesid = obs.seriesid " + "INNER JOIN NumericValue nv on nv.observationid = obs.observationid " + "where fi.identifier = ?1 and obs.phenomenontimestart >= ?2 AND obs.phenomenontimestart <= ?3 " + "order by obs.phenomenontimestart", nativeQuery = true) List findCurrentMeasure(String ident, Timestamp t1, Timestamp t2); 

POJO课程

 public class CurrentMeasure { private String identifier; private Timestamp dateTime; private BigDecimal bigDecimal; public CurrentMeasure() { } public CurrentMeasure(String identifier, Timestamp dateTime, BigDecimal bigDecimal) { this.identifier = identifier; this.dateTime = dateTime; this.bigDecimal = bigDecimal; } public String getIdentifier() { return identifier; } public void setIdentifier(String identifier) { this.identifier = identifier; } public Timestamp getDateTime() { return dateTime; } public void setDateTime(Timestamp dateTime) { this.dateTime = dateTime; } public BigDecimal getBigDecimal() { return bigDecimal; } public void setBigDecimal(BigDecimal bigDecimal) { this.bigDecimal = bigDecimal; } 

}

使用JPA,您可以直接在HQL查询中调用类CurrentMeasure的构造函数。

示例: SELECT NEW .CurrentMeasure(obsp.Identifier, obs.phenomenontimestart, nv.value) FROM ...

第11.5章的Jboss文档中解释了新语法。

另一种解决方案是使用HQL Transformers来实现相同的结果,而无需使用构造函数。