没有基础表的JPA实体

我想创建一个类,可以使用JPA本机查询映射到从数据库中提取的结果。 有没有办法将没有基础表的实体映射到结果? 我提到了这个允许它进行hibernate的链接。 这可以用JPA来完成吗?

这是我想要映射结果的类。

import java.math.BigDecimal; import javax.persistence.Entity; @Entity public class OpUsage { String username; BigDecimal number_of_clicks; String accordion; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public BigDecimal getNumber_of_clicks() { return number_of_clicks; } public void setNumber_of_clicks(BigDecimal number_of_clicks) { this.number_of_clicks = number_of_clicks; } public String getAccordion() { return accordion; } public void setAccordion(String accordion) { this.accordion = accordion; } } 

JPA 2.1规范定义了将结果从本机查询返回到非实体类的方法

你应该检查标题3.10.16.2返回非托管实例,特别是

3.10.16.2.2构造函数结果

使用SqlResultSetMapping批注的ConstructorResult批注元素指定到构造函数的映射。 ConstructorResult批注的targetClass元素指定其构造函数对应于指定列的类。 必须使用ConstructorResult批注的columns元素以与构造函数的参数列表相同的顺序指定与预期构造函数的参数对应的所有列。 作为构造函数结果返回的任何实体将处于新状态或分离状态,具体取决于是否为构造对象检索主键。

 Query q = em.createNativeQuery( "SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS avgOrder" + "FROM Customer c, Orders o " + "WHERE o.cid = c.id " + "GROUP BY c.id, c.name", "CustomerDetailsResult"); @SqlResultSetMapping(name = "CustomerDetailsResult", classes = { @ConstructorResult(targetClass = com.acme.CustomerDetails.class, columns = { @ColumnResult(name = "id"), @ColumnResult(name = "name"), @ColumnResult(name = "orderCount"), @ColumnResult(name = "avgOrder", type = Double.class)}) })