我正在向所有存储库(JPA 模块(添加自定义行为以添加我们自己的查询 api/语法。我们希望从代码外部化,以便可以在运行时更改它(目前这些注释作为自定义注释添加到域类中(。
例子:
-
通过设置动态角色/列安全矩阵来确保数据安全(角色A可以访问,即仅添加过滤器的行子集,roleB具有一些敏感属性被屏蔽,...(
-
启用/禁用功能,允许将代码预加载到生产/或有限的推出。
-
覆盖架构名称(允许代码指向不同的目标沙盒表以进行各种测试工作(
在我的 Repository Impl 类中,我可以读取此配置并将其存储为属性,但我想知道扩展 Spring Data 域类元数据是否更有意义(如果支持((认为这是 RepositoryMetadata 类(。
谢谢马克
我认为有几个类和方法你想看看:
-
RepositoryFactorySupport.getRepositoryInformation(…)
是否要挂钩到存储库元数据。 -
JpaRepositoryFactory.getEntityInformation(…)
是否要挂钩到实体元数据。这就是存储库实现的工作。
我认为后者对你来说最有趣。例如,MongoDB模块对其进行自定义,以允许@Document
注释的属性collectionName
中的Spring Expression语言动态计算要在每次存储交互时与之交互的集合。
我不确定这与 JPA 的效果如何,因为您似乎想要更改那些实际上不在 Spring Data 控制之下而是由持久性提供程序评估的内容。例如,要切换模式,您可能更愿意处理DataSource
定义、不同的表映射、您需要在持久性提供程序级别进行自定义等。