【问题标题】:Run code after Hibernate updates database schema?Hibernate 更新数据库模式后运行代码?
【发布时间】:2011-05-01 18:03:38
【问题描述】:

有没有办法向 Hibernate 注册某种 SchemaExportEventListener(这是我选择的名称),以便在它生成 DDL 后我们可以对数据库进行一些更新(Hibernate 不支持)?

我们需要在 PostgreSQL 列上设置不区分大小写的唯一约束,虽然这在 PostgreSQL 中是完全可能的,但在 Hibernate/JPA 注释中似乎不可能(@Table(uniqueConstraint)@Column(columnDefinition) 或 @987654323 @相当做我们想做的事)。

【问题讨论】:

    标签: java hibernate postgresql orm


    【解决方案1】:

    有没有办法用 Hibernate 注册某种 SchemaExportEventListener(这是我选择的名称)

    据我所知,Hibernate 没有这样的功能。

    以便在它生成 DDL 后我们可以对数据库进行一些更新(Hibernate 不支持)?

    不过,import.sql 功能可能会有所帮助。使用 Hibernate,您可以将 import.sql 文件放在类路径的根目录下,它将在模式生成后执行(假设您使用的是 createcreate-drop)。引用Rotterdam JBug and Hibernate's import.sql 博文:

    import.sql: easily import data in your unit tests

    Hibernate 有一个简洁的小功能 这是严重缺乏记录和 未知。您可以执行 SQL 脚本 在SessionFactory 创建期间 在数据库模式之后 生成以全新方式导入数据 数据库。你只需要添加一个文件 在您的类路径中命名为 import.sql root 并设置 createcreate-drop 作为你的 hibernate.hbm2ddl.auto 属性。

    我将它用于休眠搜索 现在我已经开始行动了 查询章节。它初始化我的 具有一组新数据的数据库 我的单元测试。 JBoss Seam 也使用它 在各种例子中有很多。 import.sql 是一个非常简单的功能 但有时非常有用。记住 SQL 可能依赖于 您的数据库(啊可移植性!)。

    #import.sql file
    delete from PRODUCTS
    insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...');
    insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
    

    有关此的更多信息 功能,检查Eyal's blog,他 写了一个很好的关于它的小条目。 记住如果你想添加额外的 数据库对象(索引、表和 以此类推),您还可以使用auxiliary database objects 功能。

    这应该可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2018-02-26
      • 1970-01-01
      • 2019-03-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多