通过JPA EntityManager执行Create Table Query

时间:2011-05-26 16:20:25

标签: mysql sql hibernate jpa create-table

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

2 个答案:

答案 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();

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