在 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) 派生查询中按多个属性排序?

如何在 Spring Data 中漂亮地更新 JPA 实体?

如何在 Spring Data JPA 排序中定义空处理?

从 Spring Data Jpa 运行查询时无法获得结果