以编程方式删除数据库表

时间:2013-04-14 15:42:58

标签: database jpa eclipselink

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

2 个答案:

答案 0 :(得分:0)

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

不使用提供程序特定代码,删除特定表的唯一其他方法是本机SQL。

在EclipseLink中,您将从EntityManager获取会话并创建新的SchemaManager(会话)。使用它,您可以调用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以获取会话。

答案 1 :(得分: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");