gpt4 book ai didi

java - 使用 Spring Data 获取单个 NonNull 值

转载 作者:行者123 更新时间:2023-12-01 21:53:21 25 4
gpt4 key购买 nike

我希望我的存储库中有一个返回单个值的方法。像这样:

TrainingMode findByTrainingNameAndNameEng( String trainingName, String nameEng );

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/Spring Data Docs 描述了在这种情况下,如果没有找到实体,该方法可以返回 null。我想抛出一个带有通用消息的异常,如 No TrainingMode found by %trainingName% and %nameEng%或类似的东西。

我可以使用Optional<TrainingMode>作为返回值然后使用orElseThrow

Optional<TrainingMode> findByTrainingNameAndNameEng( String trainingName, String nameEng );

repository.findByTrainingNameAndNameEng(name, nameEng).orElseThrow(() -> new RuntimeException(...));

但是每次调用这个方法时我都应该调用这个方法。目前尚不清楚 - DRY 原则已被打破。

如何使用 Spring Data 通过 orElseThrow 获取非空单个值?

最佳答案

如果在调用它的整个应用程序逻辑中重复空处理,则会违反 DRY 原则。如果DRY原则是你最担心的事情那么我能想到的是:

  1. 您可以创建一个“服务”类,它将调用委托(delegate)给带注释的存储库并处理空响应逻辑,并使用该服务类而不是直接调用存储库。缺点是向您的应用程序引入另一层(这会将存储库与您的应用程序逻辑分离)。

  2. 可以将自定义行为添加到您的数据存储库,这在文档的“3.6.1. Adding custom behavior to single repositories”部分中进行了描述。抱歉没有发布该片段。

我个人对第二种方法的问题是,它会污染应用程序的接口(interface),强制您遵循特定的命名模式(从不喜欢“Impl”后缀),并且可能会使迁移代码更加耗时(当应用程序变得大了,跟踪哪个界面负责哪个自定义行为就变得更加困难,然后人们只是开始创建自己的行为,结果证明这是另一个行为的重复)。

关于java - 使用 Spring Data 获取单个 NonNull 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com