我需要在数据库中创建一个新表,我通过JPA EntityManager访问。 JPA NativeQueries是否支持“选择”或“更新”以外的查询?或者是否有另一种在JPA上下文中执行复杂SQL查询的最先进方法?
答案 0 :(得分:9)
jpa“native queries”只能用于DML语句(Data Manipulation Language)。要发出任何DDL,例如create table,您需要从EntityManager获取底层连接。
如何从EM中提取连接取决于您正在使用的JPA实现,但肯定会包含调用EntityManager.getDelegate()。
或者(我认为这是一种更好的方法),如果你对试图创建表的对象使用spring,并使用该类创建表,则注入DataSource或JDBCTemplate。
答案 1 :(得分:0)
JPA(至少是Hibernate)可以让你使用createNativeQuery()和executeUpdate()直接执行DDL语句,如下所示:
EntityManager em = ...;
em.createNativeQuery("CREATE TABLE FOO (FOO_ID NUMBER)").executeUpdate();
em.createNativeQuery("DROP TABLE FOO").executeUpdate();
它并不理想,但你可以做到。