【问题标题】:How to add extra parameter to all queries in Repository如何为存储库中的所有查询添加额外参数
【发布时间】:2018-09-17 07:38:54
【问题描述】:

我让系统根据方法名称创建查询:

public interface CompanyRepository extends JpaRepository<Company, Long> {
Boolean existsByName(String name);
Boolean existsByRegCode(String regCode);
}

对于不同的实体(公司、用户、商店)有几个不同的存储库,它们都有名为 CountryId 的字段。

现在我需要在所有 repos 中的所有查询中添加条件“AND CountryId = :CountryId”,其中 country 参数从某个配置文件中获取它的值。

我知道我应该为此构建一些基类并从中扩展,但不知道要在这个类中添加什么。

【问题讨论】:

  • 公司实体与国家实体有关联吗?
  • Country 只是 Company 表中的一个字段。我更新了我的问题
  • 它是一个字符串吗?如果我正确理解您的问题,您可以尝试:Boolean existsByNameAndCountry(String name, String country)
  • 假设您使用的是休眠,您可以使用将自动应用的过滤器。

标签: spring spring-repositories


【解决方案1】:

您可以为所有实体定义一个超类,并将countryId 字段添加到该超类并使用@Where(clause = "countryId='id'") 进行注释

@Where(clause = "countryId='id'")
public class Entity {...}

public class Company extends Entity {...}

【讨论】:

  • 不幸的是这只允许静态值:“@Where注解的问题是它允许我们只指定一个没有参数的静态查询,并且不能按需禁用或启用。”
  • 你是对的。在使用休眠的情况下,另一种允许我们动态更改参数的方式是 AOP,它拦截请求并根据方法或类启用/禁用过滤器:cyriltech.blogspot.com/2017/03/…
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2020-11-23
  • 2012-10-18
相关资源
最近更新 更多