如何将构造函数映射与 Spring JPA 存储库结合使用

2023-11-23

我有一个 Spring 存储库,如下所示:

import org.springframework.data.repository.Repository;
import org.springframework.stereotype.Component;

import com.test.domain.My;

@Component
public interface MyRepository extends Repository<My, String> {

    My findOne(String code);

    My findByName(String name);

}

实体类是:

import javax.persistence.ColumnResult;
import javax.persistence.ConstructorResult;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown=true)
@Entity
@Table(name="vMy", schema="test")
@SqlResultSetMapping(
    name="something",
    classes = {
        @ConstructorResult(targetClass = My.class,
            columns={
                @ColumnResult(name = "myCode", type = String.class),
                @ColumnResult(name = "myShortName", type = String.class)
             }
        )
    }
)
public class My {

    @Id
    @Column(name = "myCode")
    private final String code;

    @Column(name = "myShortName")
    private final String name;

   public My(String code, String name) {
        this.code = code;
        this.name = name;
   }

   @JsonCreator()
   public My(@JsonProperty("My_c") String code) {
       this.code = code;
       this.name = null;
  }

  public String getCode() {
      return code;
  }

  public String getName() {
      return name;
  }

  @Override
    public String toString() {
       return "{code: " + code + ", name: " + name + "}";
   }    
 } 

当调用findOne或findByName时,出现以下错误:

   org.hibernate.InstantiationException: No default constructor for entity 

如何使用 Spring JPA 存储库并且没有默认构造函数?我想保留实例字段、代码和名称,最终的。


我会创建一个单独的类,名为MyDto其中有 JSON 内容,但没有实体注释。也将其字段设为最终字段。

那么你的存储库方法将是这样的:

@Query("SELECT new MyDto(m.code, m.name) FROM My m WHERE m.code = :code")
public MyDto findByCode(@Param("code") String code);

这样,您仅使用 My Entity 类来提供到数据库列的映射,而不是创建My.


EDIT:另一种方法(详细信息请参见此处)就是使用Entity类本身作为DTO。

所以你的查询方法可能如下所示:

@Query("SELECT new My(m.code, m.name) FROM My m WHERE m.code = :code")
public My findByCode(@Param("code") String code);

这样做的优点是不必创建单独的 DTO 类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将构造函数映射与 Spring JPA 存储库结合使用 的相关文章

随机推荐

  • .net core 中的 httprequest.UserHostName

    在 HttpRequest 上找不到 UserHostName 属性 任何论坛上都没有任何关于它的信息 这个已经被放弃了吗 任何想法 接受的答案不正确 someHttpContext Request Host对应于HostHTTP 请求中使
  • LINQ to SQL 设计器错误

    每次我在保存后更改设计器中的值时 designer cs 文件都会被删除 谁能告诉我如何解决这个问题 Move using您的指令DataContext cs and DataContext designer cs文件到namespace
  • 如何将 AJAX 检索到的值返回到 JavaScript 中当前函数的父函数?

    我有以下 JavaScript 和 jQuery 代码 function checkEmail email if email length getJSON ajax validate email email function data if
  • Node.js:获取已安装 npm 包的(绝对)根路径

    Task 我正在寻找一种通用方法来获取 Node js 中已安装 npm 包的 绝对 根路径 Problem 我知道关于require resolve 但这会给我入口点 主模块的路径 而不是包的根路径 Take bootstrap sass
  • 获取“td”元素的 jquery 索引

    我有标记 table tr td p class que 1 Who are you p td tr tr class ans td td tr table
  • 将文件(如对象)附加到电子邮件 python 3

    我在网上找到了很多有关如何将本地文件附加到电子邮件的示例 我想做的是将一个类似对象的文件附加到电子邮件中 你为什么问 所以我不必处理清理文件的问题 下面是我的代码和我的错误 经过多次谷歌搜索后 我仍然没有设法让它工作 任何帮助将不胜感激 d
  • Chrome 扩展:如何处理浏览器的禁用和启用事件

    有没有办法在 Chrome 浏览器禁用 启用扩展程序后运行回调 Chrome 管理 API chrome management onEnabled addListener function ExtensionInfo info chrome
  • 如何在over函数中使用partition by和order by?

    我正在使用 SQL Server 2008 R2 我正在尝试编写一个显示以下内容的查询 select productname unitprice categoryid sum unitprice over partition by cate
  • php.ini 中的 pack()非法十六进制数字警告

    我在 php 中使用 pack 时遇到一些问题 currencypair EUR USD buy sell buy alert device token array a a b message Your currencypair buy s
  • 在 Windows 版 Git 中使用 GIT_SSH_COMMAND

    我现在使用的是适用于 Windows 2 x 的 Git 第四个候选版本 并在 shell 中使用 GIT SSH COMMAND 来避免 SSH 的主机验证 在 Git Bash 中我写了这样的内容 GIT SSH COMMAND ssh
  • 警告 MSB3391: 不包含任何可以为 COM 互操作取消注册的类型

    我使用 VS2005 制作了一个简单的 C DLL 这是一个更大项目的一部分 我需要通过 VBA 代码在 Excel 中使用 DLL 因此我在程序集上使用 COM Interop 我是试图让构建过程自动生成必要的TLB文件这样我就不需要在每
  • Android-从活动启动另一个应用程序[重复]

    这个问题在这里已经有答案了 我想创建一个在单击按钮时启动外部应用程序 例如 Shazam 的活动 是否可以 如何做呢 Thanks 您需要其他应用程序包名称 如果您安装了此应用程序 可以使用 adb 检查 adb shell cmd 软件包
  • .NET 6 问题:承载错误=“invalid_token”

    我正在使用 NET 6 构建 API 但遇到了这个错误 我通过登录获得了一个令牌 然后将该令牌添加到标头中 但总是出现 401 未经授权的错误 注意 我收到 Bearer error invalid token 但是没有描述 这是我的代码
  • 如何让 Php 的stream_socket保持活动状态?

    我有一个使用stream socket client 的Php应用程序 通过tcp从后端服务器获取数据 但希望保持连接处于活动状态 甚至更好地放在池或其他东西中 以避免连接 断开连接的开销 但我不是 PHP 大师 所以我不知道如何做到这一点
  • 如何使用 Checkstyle 停止 Maven 构建

    我已经成功地使用 Maven 和 Checkstyle 插件 并且可以创建关于我的代码的报告 但我真正想要的是 如果样式检查出现任何错误 我可以停止 Maven 的构建过程 到目前为止我的pom xml如下所示
  • 为什么我会在 IE8 中触发怪异模式?

    我正在开发一个页面 当我加载到 IE8 并查看开发人员工具时 它告诉我页面默认为怪异模式 我有一个严格的 DTD 我什至继续进行明确的标准切换 尽管我认为我不需要这样做 我不明白为什么页面默认不是 IE8 标准 我唯一能想到的是 要访问此页
  • 全局隐藏光标(来自后台应用程序)

    我想从状态栏应用程序中隐藏光标 并且我已经做了一些研究 似乎不久前就找到了这个问题的解决方案 在 Cocoa Carbon 中全局隐藏鼠标光标 or http lists apple com archives carbon dev 2006
  • 如何解构 SNat(单例)

    我正在 Haskell 中试验依赖类型 并在paper 单身人士 包的 replicate2 forall n a SingI n gt a gt Vec a n replicate2 a case sing Sing n of SZero
  • HTML 模板 + JSON 与服务器 HTML

    你认为什么更好 用于 Ajax 结果 在服务器上生成的 HTML 返回将在模板中使用的数据 我认为 当需要大量数据时 服务器渲染的加号正在转义 更容易实现更复杂的逻辑 两种方法都有优点和缺点 从服务器返回 JSON 或 XML 并使用 ja
  • 如何将构造函数映射与 Spring JPA 存储库结合使用

    我有一个 Spring 存储库 如下所示 import org springframework data repository Repository import org springframework stereotype Compone