通过 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