9

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

4

2 回答 2

17

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

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

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

于 2011-05-27T06:25:08.400 回答
6

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

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

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

于 2017-07-10T21:12:04.510 回答