Hibernate更新数据库模式后运行代码?

时间:2010-10-28 08:08:01

标签: java hibernate postgresql orm

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

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

1 个答案:

答案 0 :(得分:3)

  

有没有办法用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并设置create或   create-drop作为你的   hibernate.hbm2ddl.auto财产。

     

我用它来进行Hibernate Search   现在就开始行动了   查询章节。它初始化了我的   带有一组新数据的数据库   我的单元测试。 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功能。

这应该满足您的需求。