Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有基础表的JPA实体_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 没有基础表的JPA实体

Java 没有基础表的JPA实体,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我想创建一个类,该类可以映射到使用JPA本机查询从数据库提取的结果。有没有办法将没有基础表的实体映射到结果? 我提到了允许它休眠的链接。这可以用JPA来代替吗 这是我希望映射结果的类 import java.math.BigDecimal; import javax.persistence.Entity; @Entity public class OpUsage { String username; BigDecimal number_of_clicks;

我想创建一个类,该类可以映射到使用JPA本机查询从数据库提取的结果。有没有办法将没有基础表的实体映射到结果? 我提到了允许它休眠的链接。这可以用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;
    }
}
定义将本机查询结果返回给非实体类的方法

您应该签出标题3.10.16.2返回非托管实例,尤其是

3.10.16.2.2建造商结果

使用ConstructorResult指定到构造函数的映射 SqlResultSetMapping注释的注释元素。这个 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)})
        })

非常感谢。我没有提到这个对象将在Jasper报告中使用。所以我必须使用与报告中使用的名称相同的名称。这个解决方案非常有效。只需确保将SqlResultsMapping添加到带有@Entity注释的类中,而不是添加到非实体类中,否则Spring将无法识别该映射。能否提供详细示例?这确实给了我我在寻找什么,但我无法理解的是,我们把上面的代码放在哪里?在存储库层或bean本身中?可以在此处找到放置提示: