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

如何将计算字段映射到JPA实体?

祁鸿晖
2023-03-14

我试图找到一种方法,在JPQL查询中放置一个计算字段,以映射到Spring Boot中的实体。

我刚才的例子列出了一个静态数字,但我打算将来也将其用于聚合。

@NamedQuery(name = "findSchool",
            query = "SELECT s, 9876 as num " +
                    "FROM School s " +
                    "WHERE s.id = :schoolId)


public class School implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(updatable = false, nullable = false)
    @JsonView(FindSchoolView.class)
    private UUID id;

    @Transient
    @JsonView(FindSchoolView.class)
    private String num;

}

我在尝试运行查询时不断收到以下消息:

“类[Ljava.lang.Object;不能强制转换为类com.School([Ljava.lang.Object;位于加载器“bootstrap”的模块java.base中;com.School位于加载器“app”的未命名模块中”)”,

如果我将num作为学校实体的成员取出,则没有错误。

那么,如何在JPQL查询中放入计算值以映射到实体中呢?

共有1个答案

葛胜泫
2023-03-14

我想你需要用一个公式

@NamedQuery(name = "findSchool",
            query = "SELECT s" +
                    "FROM School s " +
                    "WHERE s.id = :schoolId)


public class School implements Serializable {

    @Formula(value = "'9876'")
    @JsonView(FindSchoolView.class)
    private String num;

请注意,该值不必是常量,但您可以使用任何本机查询(尽管可能会失去一点可移植性)。

如果它不是由SQL生成的,并且您不需要将其保存在db中,那么您也可以执行以下操作:

    @Transient
    @JsonView(FindSchoolView.class)
    private String num = "9876";
 类似资料:
  • 实体类如下: 是否有任何方法可以将实体中的Transstatus列映射到枚举的整数值,即状态代码,例如,如果我有枚举值作为NOT_FOUND实体中的Transstatus值应该是12, 编辑请注意,我有两个枚举状态码的值,状态码字符串,我们想要的只是状态码,我们已经用“Ordinal”尝试过了,它打印枚举的整数值,而不是我示例中的状态码

  • 我在寻找更“改进的方法”来实现这一点,我有一种方法,从一个id中获取所有记录,然后“映射”到一个类中,我有大约200个“标记”要映射,这将是一个非常长的if链。。。例子:

  • 我在两个不同的依赖项DependencyA和DependencyB中有两个类TableNameA和TableNameB,它们表示表table_name_a和table_name_b,字段如下所述。 如上所述,我正在使用jooq,并且我想将table_name_a和table_name_b记录映射到TableNameA和TableNameB类中,但是在TableNameA的对象中,只有“FIELD”

  • 我有下面的结构,我想用MapStruct映射这个。 下面是mapstruct为toDTO方法生成的实现 下面是mapstruct为toEntity方法生成的实现 我的问题是方法只在文本不为空时设置注释。但是方法不检查空文本或空文本。因此,如果我在DTO中获得,它将创建一个新的comment对象并将文本设置为null。如何避免这一点?有人能解释一下这种行为并建议我正确的做法吗?谢了!

  • 我有一个实体,它有一个Map ElementCollection字段。我知道使用Jpa,您可以在类级别上使用@Index注释为常规字段定义索引。问题是我的地图元素集合字段创建了一个不是由@Entity注释类创建的连接表。所以我不能使用@Index注释。有没有Jpa/Hibernate方法来定义这个连接表中字段的索引,或者我必须手动定义它们?这是地图字段。 谢谢

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例