Spring JPA 存储库接口和默认方法用例

2024-04-24

我目前想知道是否可以通过使用 JPA 存储库内的默认接口方法来优雅地解决特定用例。

假设我们有以下实体和支持类型:

public enum Status {
   STATUS_1,
   STATUS_2,
   STATUS_3
}
 

@Entity
@Getter // from lombok
@Setter // from lombok
public class SomeEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "status")
    private Status status;
}

我需要能够查询列表SomeEntity基于组合Status枚举值。

使用 Spring JPA,其各自的存储库可能如下所示:

@Repository
public interface SomeRepository extends JpaRepository<SomeEntity, Integer> {

    @Query("select s.id, ... from SomeEntity s where s.status in (:statuses)")
    List<SomeEntity> getByStatuses(@Param("statuses") List<Status> statuses);
}

然而,必须通过的特定状态组合在很大程度上取决于领域SomeEntity,我想在存储库调用中“烘焙”这些状态。为什么在存储库中——当前多个服务使用同一个存储库,并且SomeEntity作为与根据服务的具体情况一起更新的其他实体进行交易的一部分进行更新。特别是getByStatuses所有服务的调用都是相同的,并且我们有重复的代码片段,大致如下所示:

List<Status> statuses = Arrays.asList(Status.STATUS_1, Status.STATUS_3);
List<SomeEntity> entities = someRepository.getByStatuses(statueses);
....

我想知道是否可以在存储库内的默认方法中提取上述片段,并将我的服务更改为使用该方法:

@Repository
public interface SomeRepository extends JpaRepository<SomeEntity, Integer> {

    @Query("select s.id, ... from SomeEntity s where s.status in (:statuses)")
    List<SomeEntity> getByStatuses(@Param("statuses") List<Status> statuses);

    default List<SomeEntity> getByRelevantStatuses() {
        List<Status> relevantStatuses = Arrays.asList(Status.STATUS_1, Status.STATUS_3);
        return this.getByStatuses(relevantStatuses);
    }
}

我担心 Spring 幕后的“魔力”,它会导致上述方法出现问题吗?


看来所描述的场景中的默认接口方法用法是有效的。我尝试过,到目前为止我还没有看到任何问题。

我仍然很乐意知道是否有需要担心的事情,如果我自己发现任何有用的东西,我会更新这篇文章。

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

Spring JPA 存储库接口和默认方法用例 的相关文章

  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某

随机推荐

  • 在 Android 项目中使用“compileOnly”范围?

    我在项目中使用 Gradle 2 12 或更高版本 以及适当版本的 Android Gradle 插件 Gradle 2 12 引入了compileOnly配置 那么为什么当我尝试使用它时会出现错误呢 找不到参数的compileOnly 方
  • 为什么 mongodump 不备份索引?

    在阅读 mongodump 文档时 我发现了此信息 mongodump 在其备份数据中仅捕获数据库中的文档 不包含索引数据 mongorestore 或 mongod 必须在恢复数据后重建索引 考虑到索引也是数据库难题的关键部分 并且它们需
  • XmlAttribute 不适用于 XmlArray

    我在使用 XmlSerializer 生成以下 XML 结构时遇到问题
  • 动画窗口调整大小内容重新排列

    我看到许多主题 当调整窗口大小时 它会重新排列内容并带有轻微的动画 例如http wpexplorer me demo php theme pronto http wpexplorer me demo php theme pronto 如果
  • aws kinesis get-records 返回空数组

    我正在玩 Kinesis 我尝试了一个非常简单的示例 我先放一个样本记录 aws kinesis put records records Data Test data hemant PartitionKey 20150421 stream
  • 使用 O(n) 运行时查找范围内的元素

    我正在尝试编写一个函数 从用户接收一个大小为 N 的数组 其值在0 gt N 1之间 如果所有值在0 gt N之间 该函数应该返回 1 1 是否存在 否则返回 0 我们可以假设用户输入的数字只是有效值 0 gt N 1之间 示例 N 5 值
  • Spring:web.xml 中的命名空间与 contextConfigLocation 初始化参数

    我正在阅读 Spring MVC 的文档 并且有一个关于 init 参数的问题 如果有必要的话 我正在使用 Spring 3 2 contextConfigLocation 和命名空间有什么区别 contextConfigLocation
  • 当还必须切换用户时使用 JSch 到 SFTP

    我在 Java 客户端中使用 JSch 连接到远程服务器并使用 SFTP 获取一些文件 以下代码对我来说运行良好 JSch ssh new JSch JSch setConfig FileTransferConstants STRICT H
  • MOTODEV 比 Android 模拟器更快吗?

    我在 VMWare 中的 Windows XP VM 中运行 Android SDK 因此 Android 模拟器需要很长时间才能启动 我最近听说了另一个模拟器 MotoDev 对于那些尝试过这两种方法的人来说 你能告诉我 MotoDev
  • android sdk eclipse,三星 Galaxy Tab 2,如何识别设备

    我正在尝试使用 eclipse 和 android sdk 在 Samsung Galaxy Tab 2 上进行开发 我已经安装了 Samsung Kies 并在我的设备上打开了 USB 调试 看起来 eclipse 不知道新的三星驱动程序
  • rspec 中的相关测试

    我编写功能测试 并且我需要进行的测试取决于之前测试的通过情况 假设我有一个按钮 可以打开一个窗口 其中有一个功能 也就是说 为了检查此功能 我需要首先检查按钮的正确操作 即打开窗口或不起作用 因此 我需要这样做 如果单击按钮时测试失败 则测
  • Odroid XU4 上的 Tensorflow 编译

    我正在尝试在 Odroid XU4 16GB eMMc Ubuntu 16 上编译 Tensorflow 尝试了完整和精简版 但出现如图所示的错误 https www dropbox com sh j86ysncze1q0eka AAB8R
  • Windows Phone 8 检测屏幕解锁

    我的 WP8 应用程序设置为在锁定屏幕下运行 因为即使屏幕锁定时它也需要继续运行 但我希望能够检测用户何时解锁屏幕 我该怎么做 手机解锁时会调用哪些方法 如果有 框架的Unobscured当用户解锁时事件将触发 它也会触发Obscured当
  • 在页面加载之前运行 JavaScript 函数(设置适当大小的背景)

    我有一个图像背景 无论用户的分辨率是多少 我都希望其内容始终可见 因此 我希望能够在一开始就在页面加载之前确定分辨率并设置适当的背景图像文件 有可能吗 您可以运行可访问 DOM 的 Javascript 函数 无需等待页面加载 的最早点是放
  • 我可以像处理表一样处理存储过程的结果吗?

    在sql server 2005中可以做这样的事情吗 WITH tmpTable AS EXEC spWhatever 或者我可以通过其他方式查询从 sp 返回的数据 谢谢 临时表 CREATE TABLE foo col1 int col
  • 当夏令时开始/结束时,自纪元以来的毫秒数会发生什么?

    自纪元以来的毫秒数表示自 1970 年以来经过的毫秒数 在夏令时结束之前的那一刻 或者当我们将时钟从 2 00 设置回 1 00 时 自纪元以来的毫秒数也会回退 或者他们继续吗 另一个问题 如果我住在美国加利福尼亚州 采用太平洋 夏令 标准
  • 任何修改后需要 CLEAN PROJECT 的未知错误

    我们一直在开发一个应用程序 已经过去几个月了 我们遇到了一些奇怪的错误 例如 以某种方式启用Instant Run阻止我们编译和测试 最近 我们遇到了以下行为 每次我们想要Run我们的应用程序来测试它 如果自上次以来有任何修改 则会弹出错误
  • Tomcat日志格式禁用IPv6格式

    以下是三个日志示例 127 0 0 1 17 Sep 2010 14 03 07 0800 GET docs logging html HTTP 1 1 200 24040 http localhost 8000 docs manager
  • 重写标准库使用的内存分配方法? [复制]

    这个问题在这里已经有答案了 是否可以覆盖 STL 分配 管理和释放内存的方式 如果可能的话 人们会怎样做呢 有没有一种方法可以将处理原始内存的代码保留在一个类或文件中 我想对我的整个程序执行此操作 以便我可以跟踪内存使用情况 时间和生命周期
  • Spring JPA 存储库接口和默认方法用例

    我目前想知道是否可以通过使用 JPA 存储库内的默认接口方法来优雅地解决特定用例 假设我们有以下实体和支持类型 public enum Status STATUS 1 STATUS 2 STATUS 3 Entity Getter from