如何在 Spring Data JPA 中编写动态原生 SQL 查询?

2024-01-12

我需要在 Spring Boot Web 应用程序中的数据库中的多个表上编写搜索查询。

它使用 spring data jpa。我知道我们可以使用 @Query 注释和 native = true 标志在 spring data jpa 中编写本机查询。

有什么方法可以在存储库类中编写查询而不是 @Query 注释,因为查询非常复杂和动态。


你需要做一个CustomRepository并添加一个带有本机查询的方法。

我这样做:

  1. 创建您的自定义存储库:

    public interface OcorrenciaRepositoryCustom {
       List<Object[]> getStrings(List<String> valores);
    }
    
  2. 实施您的自定义存储库: (实现的名称必须是原始存储库的名称添加 Impl 作为后缀。)

    public class OcorrenciaRepositoryImpl implements OcorrenciaRepositoryCustom {
        @PersistenceContext
        private EntityManager entityManager;
    
        @Override
        public List<Object[]> getStrings(List<String> strings) {
            StringBuilder sb = new StringBuilder();
            sb.append("SELECT count(o.id) FROM soebm.ocorrencia o WHERE 1=1 ");
    
            if(strings.get(0)!=null && StringUtils.isNotEmpty(strings.get(0))) {
                sb.append(" AND to_char(o.date, 'YYYY-MM-DD') >= :dataInicio ");
            }
    
            Query query = entityManager.createNativeQuery(sb.toString());
    
            if(strings.get(0)!=null && StringUtils.isNotEmpty(strings.get(0).toString())) {
                query.setParameter("dataInicio", strings.get(0));
            }
            return query.getResultList();
        }
    }
    
  3. 从主存储库扩展您的自定义存储库:

    public interface OcorrenciaRepository extends JpaRepository<Ocorrencia, Long>, OcorrenciaRepositoryCustom {
        Ocorrencia findByPosto(Posto posto);
    }
    
  4. 现在,在服务中,您可以从主存储库调用新方法。

    @Autowired
    private OcorrenciaRepository repository;
    
    public List<Object[]> findOcorrenciaCustom(String str) {
        List<String> strings = new ArrayList<String>() {{add(dataInicio);}};
        return repository.getStrings(strings);
    }
    

重要的是自定义存储库位于 JpaRepositories 搜索到的包下

@EnableJpaRepositories("com.test.my.repository")

我在本例中使用了 Spring-Data-Jpa 1.9。它在我的项目中完美运行。

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

如何在 Spring Data JPA 中编写动态原生 SQL 查询? 的相关文章

随机推荐

  • 如何将 char 数组转换为 int? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 所以输入文件如下所示 Adam Zeller 45231 78 86 91 64 90 76 Barbara Young 274253 88
  • 在正则表达式中指定 Unicode 字符

    如何创建包含 unicode 字符的 ruby 正则表达式 例如 我想在正则表达式中使用字符 u0002 你可以写 x02 u0002 x02 gt 0 如果您不确定 您可以从字符串开始 Regexp new u0002 gt x02 这是
  • 在 R 中安全地创建 S3 泛型

    Henrik Bengtsson 为互联网提供了一种很好的方式在 R 中创建 S3 泛型 http www1 maths lth se help R setGenericS3 不必担心它们是否已经在 2002 年之前创建过 他的函数 set
  • 指针类型静态字段的值被调试器显示为零 0x0,而实际上它具有有效值

    我在尝试使用类型访问结构体静态字段的值时遇到了这种行为uint 调试时 监视窗口显示静态字段StaticBitMask的值为零 但实际上 并且如预期的那样 它是一个有效的指针 并且Console WriteLine 打印它 如下面的控制台输
  • 控制配置设置 Apache Spark UTF 编码以写入为 saveAsTextFile

    那么如何告诉spark在使用时使用哪种UTFsaveAsTextFile path 当然 如果知道所有字符串都是 UTF 8 那么它将节省 2 倍的磁盘空间 假设像java一样默认UTF是16 saveAsTextFile实际上使用Text
  • MSVC:为什么“extern void x;”是“非法使用类型'void'”吗?

    为什么这段代码 extern void x 导致 cl t555 c std c11 Za t555 c 1 error C2182 x illegal use of type void 这里什么是非法的 UPD 使用案例 cat t555
  • IOS - 如何重新签名 ipa 文件?

    我尝试重新签署 ipa 文件 但遇到一些问题 我存档了该项目并将其导出以进行临时部署 然后按照本教程进行操作 https sholtz9421 wordpress com 2012 06 08 digitally resigning ipa
  • 未检测到 VS 代码 venv (WSL)

    我最近切换到 WSL Ubuntu 现在 当我使用创建虚拟环境时 python m venv venv VS Code 中不会自动检测到它 我的设置 json python pythonPath C Users ankus AppData
  • iOS 设置屏幕用户界面

    我正在尝试在我的应用程序中创建一个设置屏幕 就像 iPhone 内部存在的设置一样 单击设置时 我们会看到带有圆形边缘的不同部分 全是白色 一些选项带有箭头 一些是开 关按钮 苹果是如何实现这一目标的呢 是不是一个UITableView 有
  • 在 Laravel 中将数组转换为集合

    我在 PHP 中有以下数组 website example url example com website example url example com 现在我想将其转换为集合 因此我按键排序website or url 但是当我这样做时
  • 使用 TensorFlow 进行多标签文本分类

    文本数据被组织为具有 20 000 个元素的向量 例如 2 1 0 0 5 0 第 i 个元素表示文本中第 i 个单词的频率 真实标签数据也表示为具有 4 000 个元素的向量 例如 0 0 1 0 1 0 第 i 个元素指示第 i 个标签
  • SQL 全外连接

    我正在尝试编写一个连接语句将以下三个数据集连接在一起 这是使用 MS SQL Server Set 1 ID Date Col1 1 Jan 11 a1 1 Jan 13 a2 Set 2 ID Date Col2 1 Jan 11 b1
  • 如何使 div 的高度固定,但如果内容大于高度,则 div 会增长?

    假设我有一个我设置的 divheight 500px 在CSS中 因此它的高度是固定的 我的页面内容是用 JavaScript 自动生成的 因此有时它会大于 500px 并且会溢出 div 边框 我的问题是 是否可以有固定的大小 例如 50
  • 如何使用自定义密钥编写 MifareClassic

    我需要找到一个解决方案来使用自定义密钥编写 Mifare Classic 1 K 标签 我无法编写它 我已经尝试了每个选项 但不幸的是我总是收到错误 IOException 收发失败 下面是我的代码片段 byte custom key by
  • jQuery:如何从加载回调中修改加载的内容

    我正在动态创建许多 div 元素 行 每行都将具有相同的基本格式 仅文本发生变化 由于行结构很复杂 我尝试从静态 html 文件加载 基本 div 然后加载后 使用每行的参数调整一些属性 类似于 Android 的 xml 定义的适配器 我
  • Angular 2 HTTP POST 执行 OPTIONS 调用

    我的 Angular 2 应用程序遇到了一个非常奇怪的问题 我实际上想对我的 Play Scala API 进行包含 JSON 的 POST 调用 但它一直想尝试进行 OPTIONS 调用 这是我的代码 登录服务 constructor p
  • 枚举成员的字符串化

    我需要将枚举成员 其值 而不是标识符 转换为字符串 我尝试了以下方法 它适用于 MACRO TYPE A 但不适用于枚举值 typeA 我认为这有点奇怪 您知道如何做到这一点吗 define tostr a a define tostr a
  • 如何检查 Selenium Server 是否正在运行

    我有一堆 phpunit 测试 其中一部分使用 selenium 我需要知道 selenium 服务器是否正在运行 Windows 有没有办法从php检查它 默认情况下 Selenium 服务器接受本地主机端口 4444 上的命令 所以你可
  • “Csc.exe”退出,代码为-1073741819

    每次我尝试运行我的代码时 都会遇到此错误 Csc exe 退出 代码为 1073741819 我清理了我的解决方案并重新启动了 Visual Studio 但没有任何收获 谁能帮我 我遇到了同样的问题 删除项目中的 bin 和 obj 文件
  • 如何在 Spring Data JPA 中编写动态原生 SQL 查询?

    我需要在 Spring Boot Web 应用程序中的数据库中的多个表上编写搜索查询 它使用 spring data jpa 我知道我们可以使用 Query 注释和 native true 标志在 spring data jpa 中编写本机