0

我正在向所有存储库(JPA 模块)添加自定义行为以添加我们自己的查询 api/语法。我们希望从代码中外部化,以便可以在运行时更改它(目前这些是作为自定义注释添加到域类中的)。

例子:

  • 通过设置动态角色/列安全矩阵来确保数据安全(roleA 可以访问,即仅添加过滤器的一部分行,roleB 有一些敏感属性被屏蔽,...)

  • 启用/禁用功能以允许预加载代码以促进/或限制推出。

  • 覆盖模式名称(允许代码指向不同的目标沙箱表以进行各种测试)

在我的 Repository Impl 类中,我可以读取此配置并将其作为属性存储在这里,但我想知道扩展 Spring Data 域类元数据是否更有意义(并且如果支持)(认为这是 RepositoryMetadata 类)。

谢谢马克

4

1 回答 1

0

我认为您需要查看几个类和方法:

  • RepositoryFactorySupport.getRepositoryInformation(…)如果您想挂钩存储库元数据。
  • JpaRepositoryFactory.getEntityInformation(…)如果你想挂钩实体元数据。这就是存储库实现要处理的内容。

我认为后者对你来说是最有趣的。例如,MongoDB 模块对其进行自定义,以允许@Document注释属性中的 Spring Expression 语言在collectionName每次商店交互时动态计算要与之交互的集合。

我不确定这与 JPA 有多好用,因为您似乎想要更改并非真正受 Spring Data 控制而是由持久性提供程序评估的事物。例如,要切换模式,您可能更愿意处理DataSource定义、不同的表映射、您需要在持久性提供程序级别进行自定义等。

于 2014-12-09T09:34:36.407 回答