是否存在一个在Spring Data后端中通用的接口,我们可以传递JPQL查询并返回可以支持嵌套分层数据的List<Map<String, Object>
或类似的通用数据结构?
我的目标是创建一个适用于多个NoSQL后端的应用程序,而无需事先了解表/集合的架构。我找到了MongoTemplate
,MongoOperations
,CassandraTemplate
和CassandraOperations
,但这些都没有实现公共接口。
我的问题的后半部分是我不想为每个表/集合创建DAO,因为直到运行时我都没有这方面的知识。
这些要求是否排除了使用Spring Data?
答案 0 :(得分:2)
你应该看看Hibernate OGM,它支持许多NoSQL DB,也许有办法将它与Hibernate的dynamic models结合起来。
与大多数JPA提供商相比,DataNucleus JDO似乎对NoSQL有更广泛的支持。但是,我不确定是否支持动态模式。
Eclipselink似乎也支持some NoSQL DBs,并提供an API for dynamic entities;但是,我无法找到一份体面的最新文档。
答案 1 :(得分:2)
传递JPQL查询以获取通用对象是没有意义的。
我想说JPA和ORM的目的是帮助“知道对象”(应用程序实际使用的对象)。如果您的应用程序使用“通用”对象,则意味着它们仅“用于”显示而不是其他任何内容。
您可以构建像Map<String, String>
这样的动态对象但是到了什么程度?如果仅用于显示,那么最好省略持久性并编写“数据库浏览器” - 一个在运行时读取模式并创建您提到的层次结构的应用程序。
如果您想要运行JPQL查询,那么您的应用程序中已经有了一些持久对象,并且您可能需要连接到与您的设计完全匹配的后端数据库。或者您可能尝试将JPQL用作“可移植”SQL。在任何一种情况下,您都需要动态映射。您可以使用上面提到的“数据库浏览器”来确定在运行时需要将哪些表和列映射到“已知对象”。
您可以为每个“已知对象”编写一个带有自定义实例的通用DAO类,或者您可以重写EntityManager
的配置文件以获得正确的映射。
我希望这会有所帮助。