代码之家  ›  专栏  ›  技术社区  ›  Rich

是否在休眠更新数据库架构后运行代码?

  •  2
  • Rich  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 8 年前
        1
  •  3
  •   Pascal Thivent    15 年前

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

    据我所知,Hibernate没有那样的东西。

    这样,在生成了DDL之后,我们可以对数据库进行一些更新(Hibernate不支持哪些更新)?

    然而, import.sql 这项功能可能有帮助。有了Hibernate,您可以 导入SQL 文件位于类路径的根目录,它将在模式生成后执行(假设您正在使用 create create-drop )引用 Rotterdam JBug and Hibernate's import.sql 博客帖子:

    import.sql: easily import data in your unit tests

    冬眠有一个整洁的小特征 这是严重的文件不足和 未知的。可以执行SQL脚本 期间 SessionFactory 创造 在数据库模式之后 生成以导入新数据 数据库。你只需要添加一个文件 命名 导入SQL 在你的课堂上 根并设置 创造 创建液滴 作为你 hibernate.hbm2ddl.auto 财产。

    我用它来搜索冬眠 行动现在我已经开始了 查询章节。它初始化我的 具有新数据集的数据库 我的单元测试。JBoss Seam也使用它 在各种各样的例子中有很多。 导入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 特征。

    这应该满足你的需要。