【问题标题】:Spring Data JPA 2.0.0: How to best resolve conflict between custom findById method and new version in CrudRepository?Spring Data JPA 2.0.0:如何最好地解决自定义 findById 方法与 CrudRepository 中的新版本之间的冲突?
【发布时间】:2018-04-01 01:57:22
【问题描述】:

Spring Data JPA 2.0.0 版本用 CrudRepository 中的 findById 和 existsById 替换了 findOne 和 exists 方法。

我们有一个不幸的情况,我们的实体 PK 属性被称为“oid”,并且通常还有一个名为“id”的额外自然 id 字段。更糟糕的是,两者都是字符串。

这意味着我们现有的 findById 和 existsById Repository 方法冲突或无意中覆盖了 CrudRepository 中的方法。

我们可以将 findById 重命名为 queryById,并将 existsById 重命名为类似 existsLocalById,但两者都是变通方法,我怀疑人们会在无意中使用错误的方法引入错误。

是否有其他可用的选项可以使设计更简洁?

【问题讨论】:

    标签: spring-data-jpa


    【解决方案1】:

    因此,稍微深入了解更改背后的 JIRA 会发现以下内容:

    如果您使用 @Query 注释该方法,它应该可以工作 表示你希望这个东西明确地成为一个查询方法

    初步测试似乎表明这可以按预期工作,例如在 MyEntityRepository 中..

    @Query
    Optional<MyEntity> findById(String id);
    
    @Query
    boolean existsById(String id);
    

    我们仍然必须注意使用正确的方法,因为它可能会导致一些我怀疑的难以确定的错误。

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2018-10-19
      • 2020-02-09
      相关资源
      最近更新 更多