通过 JPA EntityManager 执行创建表查询

Posted

技术标签:

【中文标题】通过 JPA EntityManager 执行创建表查询【英文标题】:Execute a Create Table Query through the JPA EntityManager 【发布时间】:2011-09-02 18:19:17 【问题描述】:

我需要在通过 JPA EntityManager 访问的数据库中创建一个新表。 JPA NativeQueries 是否支持“选择”或“更新”以外的查询?还是有另一种最先进的方式在 JPA 上下文中执行复杂的 SQL 查询?

【问题讨论】:

【参考方案1】:

jpa“本机查询”只能用于 DML 语句(数据操作语言)。要发出任何 DDL,例如创建表,您需要从 EntityManager 获取底层连接。

如何从 EM 中提取连接取决于您使用的 JPA 实现,但肯定包括调用 EntityManager.getDelegate()。

或者(我认为这是一种更好的方法),如果您正在使用 spring 将 DataSource 或 JDBCTemplate 注入到尝试创建表的对象中,并使用该类来创建表。

【讨论】:

【参考方案2】:

JPA(至少是 Hibernate)可以让你直接使用 createNativeQuery() 和 executeUpdate() 执行 DDL 语句,如下所示:

EntityManager em = ...;
em.createNativeQuery("CREATE TABLE FOO (FOO_ID NUMBER)").executeUpdate();
em.createNativeQuery("DROP TABLE FOO").executeUpdate();

这并不理想,但你可以做到。

【讨论】:

以上是关于通过 JPA EntityManager 执行创建表查询的主要内容,如果未能解决你的问题,请参考以下文章

创建没有 persistence.xml 配置文件的 JPA EntityManager

怎样用JPA的EntityManager执行原生sql返回ResultSet-CSDN论坛

Spring Boot-------JPA——EntityManager构建通用DAO

ORM 规范

使用 EntityManager (JPA) 在 DAO 中更新 () 方法的推荐行为?

使用 JPA EntityManager 进行批量插入