0

我的应用程序使用 JPA 创建了数据库表。我想使用 JPA 和/或 EclipseLink API(不使用DROP TABLE命令)以编程方式删除这些表。删除 JPA 框架创建的数据库表的正确方法是什么?

4

2 回答 2

0

如果您能够使用 JPA 2.1,您可以指定提供程序写入或读取脚本以删除表,从而允许您控制执行的内容。不幸的是,除非您可以动态编写自己的放置表脚本,否则它不会给您提供精细的控制。

在不使用提供者特定代码的情况下,删除特定表的唯一其他方法是本机 SQL。

在 EclipseLink 中,您将从 EntityManager 获取会话并创建一个新的 SchemaManager(session)。有了它,您可以调用 dropDefaultTables() 删除持久性单元中的所有表,或使用 dropObject(DatabaseObjectDefinition) 删除用于表示表、存储过程等的单个 DatabaseObjectDefinition 对象。您可以使用 getDefaultTableCreator(boolean generateFKConstraints) 来获取PU 的默认表创建者。有了它,您可以使用 getTableDefinitions() 来获取代表 PU 中表的所有 DatabaseObjectDefinition 对象,因此您可以选择一个来删除。

http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_access_table.2C_column_and_schema_information_at_runtime.3F 展示了如何打开 EM 以获取会话。

于 2013-04-15T13:38:34.450 回答
0

这对我有用(EclipseLink JPA 2.1):

EntityManagerFactory emf = Persistence.createEntityManagerFactory("you persistence unit"); 
EntityManager em = emf.createEntityManager();
SchemaManager sm = new SchemaManager(em.unwrap(DatabaseSession.class));
sm.dropTable("table name");
于 2018-03-28T18:52:07.423 回答