在 Spring Data JPA 中,如何在运行时添加实体?
Posted
技术标签:
【中文标题】在 Spring Data JPA 中,如何在运行时添加实体?【英文标题】:In Spring Data JPA, How to add an Entity during runtime ? 【发布时间】:2014-09-22 08:11:48 【问题描述】:在我的业务中,我将为 mysql 动态创建模型和存储库。 我已成功创建并编译了 java 文件。然后使用 beanfactory 为存储库和服务注册 bean。 但我不知道如何映射实体。我搜索了一些类似的问题,但没有一个干净的解决方案。 谁能帮我看一些代码示例?
【问题讨论】:
您确定您的用例需要在运行时动态添加新实体(并更改数据库架构)。我会假设您正在尝试构建一个与关系数据库不太匹配的设计。 是的,这是要求。我需要同时支持 NoSQL 和 RDBMS 【参考方案1】:JPA 主要使用静态模式。这有充分的理由,请参阅 www.java.net/node/666078 上的讨论。
我只知道 3 个解决方案:
1) 将您的域模型重构/更改为静态(最好的方法,但在某些实际情况下,您确实需要至少 1 或 2 个动态表)
2) 对动态表使用原生查询和@SqlResultSetMapping(这是我在这种特殊情况下使用的解决方案)
3) 使用 Jpa 提供者非可移植的特定方式(实际上不是 JPA)参见例如 http://www.infoq.com/articles/hibernate-custom-fields
【讨论】:
感谢您的回复。 (2)可以支持动态创建表吗? 是的。例如通过 em.createNativeQuery("CREATE TABLE SAMPLE_TABLE(SOME_ID BIGINT NOT NULL)").executeUpdate();稍后使用 ALTER TABLE ...以上是关于在 Spring Data JPA 中,如何在运行时添加实体?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Spring Data JPA 了解底层数据库名称
如何在实现 Spring Data JPA AuditorAware 接口时获取 getUserPrincipal().getUserName()
如何在 Spring Data (JPA) 派生查询中按多个属性排序?