mysql的表建外键和hbm2java生成many-to-one代码的问题。用hibernate tools生成那个建表的SQL代码会在create语句最后加一个type=MyISAM,这个存储引擎在MYSQL中是不支持外键的。在mysql的参考手册的1.8.5.5. 外键中有如下描述(我这个是5.1版本的,用的是个比较旧的版本,现在的最新版本支持与否我不太清楚,没看手册和测试):
对于InnoDB之外的其他存储引擎,MySQL服务器能够解析CREATE TABLE语句中的FOREIGN KEY语法,但不能使用或保存它。未来将进行扩展,能够将这类信息保存到表规范文件中,以便能被mysqldump和ODBC检索。稍后,还将为MyISAM表实现外键约束。
所以要生成的表要使用外键约束的话,则需要在把生成的MYSQL的SQL中的type=MyISAM去掉,或者换成type(engine)=InnoDB
第二个问题要使用hbm2java和hbm2ddl生成有外键关联的代码,不能只编写含有节点的映射文件,还要把节点参照的类的映射文件和它一起生成代码才能正常运行这两hbm2,否则将发生一个引用了未映射类的错误。一起生成的话,就会生成成功了。