【问题标题】:Delete database tables programmatically以编程方式删除数据库表
【发布时间】:2013-04-14 15:42:58
【问题描述】:

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

【问题讨论】:

标签: database jpa eclipselink


【解决方案1】:

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

不使用提供程序特定代码,删除特定表的唯一其他方法是本机 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 以获取会话。

【讨论】:

    【解决方案2】:

    这对我有用 (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");
    

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 2011-11-03
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多