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