当前位置: 首页 > 知识库问答 >
问题:

没有基础表的JPA实体

巴英韶
2023-03-14

我想创建一个可以映射到使用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;
    }
}

共有1个答案

郭志
2023-03-14

JPA2.1规范定义了将本机查询结果返回给非实体类的方法

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

3.10.16.2.2施工结果

到构造函数的映射是使用SqlResultMapping注释的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)})
        })
 类似资料:
  • 问题内容: 我想创建一个类,该类可以映射到使用JPA本机查询从数据库中提取的结果。有没有办法将没有基础表的实体映射到结果?我提到这个链接,使得它的hibernate。可以使用JPA代替吗? 这是我要为其映射结果的班级。 问题答案: JPA 2.1规范定义了将结果从本机查询返回到非实体类的方法 您应该检出标题 3.10.16.2返回非托管实例, 尤其是 3.10.16.2.2构造函数结果 使用 Sq

  • 问题内容: 我有一个非常丑陋的旧数据库系统,需要与之集成。本质上,我在系统上做一些只读报告,并且我不想建立代表我正在处理的每个表的上千个实体。相反,我只想为我生成的每种报告类型定义一个实体(本质上是来自不同表的一堆列的并集),然后让讨厌的hibernate映射(许多已加入,很多已合并) sql查询到此类实体的列表。 问题是:我可以创建一个没有基础表的实体,并使用sql语句填充所述实体的列表吗? 谢

  • 问题内容: 我有一个具有以下结构的数据库: 当我尝试创建EntityProperty类时 我得到以下异常: 我知道JPA实体必须具有主键,但是由于无法控制的原因,我无法更改数据库架构。是否可以创建将与这样的数据库模式一起工作的JPA(hibernate)实体? 问题答案: 我猜您有一个组合键,其中的外键是。如果是这样,则可以按如下所示进行映射:

  • 我正试图找到在ORM上映射我的数据的最佳方法。我有一个从MySQL数据库中获取数据的查询 用spring boot和spring的数据获得这些数据的最优方法是什么?? 我应该使用@query注释并执行它还是以某种方式为Equipment and Devices表创建实体,然后使用JPQL/HQL将表连接到查询中,但是我应该如何映射结果? 提前道谢。

  • 主要内容:我真的能学会吗?,编码能力差怎么办?“编程零基础,可以学习 Python 吗”,这是很多初学者经常问我的一个问题。当然,在计算机方面的基础越好,对学习任何一门新的编程语言越有利。但如果你是零基础,也不用担心,因为无论用哪门语言作为学习编程的入门语言,总是要有一个开始。 我真的能学会吗? 就我个人的观点,Python 作为学习编程的入门语言是再合适不过的。 凡是学习过 C 语言的同学都感同身受,认为 C 语言不是很好的入门语言,很多曾

  • 我有以下2个实体: 它们有共享字段/列,例如:等,但是每个主键id字段的名称不同,例如有和 有没有一种方法可以创建一个基本实体超类来保存这些通用的