Mysql 通过JPA EntityManager执行创建表查询

Mysql 通过JPA EntityManager执行创建表查询,mysql,sql,hibernate,jpa,create-table,Mysql,Sql,Hibernate,Jpa,Create Table,我需要在通过JPA EntityManager访问的数据库中创建一个新表。JPA NativeQueries是否支持“选择”或“更新”以外的查询?或者有没有另一种最先进的方法在JPA上下文中执行复杂的SQL查询?JPA“本机查询”只能用于DML语句(数据操作语言)。要发布任何DDL,例如创建表,您需要从EntityManager获取底层连接 如何从EM中提取连接将取决于您使用的JPA实现,但肯定会包括调用EntityManager.getDelegate() 或者(我认为这是一种更好的方法),如

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

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

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

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

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

EntityManager em = ...;
em.createNativeQuery("CREATE TABLE FOO (FOO_ID NUMBER)").executeUpdate();
em.createNativeQuery("DROP TABLE FOO").executeUpdate();
这并不理想,但你可以做到