我们如何改变在hibernate中生成PK和FK名称的方法?

时间:2010-03-19 06:10:45

标签: java hibernate

我可以提供一些生成ssh而不是FK030HF9840303的算法吗?

3 个答案:

答案 0 :(得分:3)

您需要实现自己的NamingStrategy(org.hibernate.cfg.NamingStrategy)。也许子类化当前使用的是最简单的方法(默认情况下,hibernate使用DefaultNamingStrategy)。

然后使用您的命名策略配置sessionFactory:

SessionFactory sf = new Configuration()
    .setNamingStrategy(new YourNamingStrategy())
    .addFile(...)
    .buildSessionFactory();

或者通过会话工厂上的spring依赖注入,如果您正在使用它:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
  <property name="namingStrategy">
    <ref bean="namingStrategy" />
  </property>
...

答案 1 :(得分:1)

您无法使用注释或命名策略覆盖任何内容。例如,无法使用命名策略指定连接表的FK,并且使用注释很痛苦。

如果您愿意以相同的方式配置所有内容,则可以在将架构导出到数据库之前修改注释配置

AnnotationConfiguration configuration = ...;
Iterator<Table> tables = configuration.getTableMappings();
...
Iterator<ForeignKey> keys = table.getForeignKeyIterator();
while ( keys.hasNext() ) {
ForeignKey key = keys.next();
key.setName( ... );
}
...

SchemaExport schemaExport = new SchemaExport( configuration );
schemaExport.setHaltOnError( true );
schemaExport.execute( false, true, false, true );
List exceptions = schemaExport.getExceptions();
...

答案 2 :(得分:0)

另外,如果您要使用特定的NON PROGRAMMATIC命名策略,则只需更改hbm.xml文件的外键映射即可。它是所有相关集合的属性等。