我可以提供一些生成ssh而不是FK030HF9840303的算法吗?
答案 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文件的外键映射即可。它是所有相关集合的属性等。