日期:2014-05-18  浏览次数:20680 次

为什么hibernate不能为带索引的表自动建立外键?
many to one关系中,hibernate会自动为many一方建立外键,以前用的挺正常,但是最近发现一件事情,我有一个数据库,hibernate之前已经在启动时建立了外键,最近因为某个测试,我把hibernate建立好的外键全部删除了,然后重新启动项目了,然而这次我发现hibernate没有再自动为数据表建立外键了,我反复查找了原因,后来发现,当第一次hibernate建立外键时,还同时在表里建立了基于外键的索引,我删除了外键,没有删除索引,当索引存在的情况下,hibernate不会新建外键,删除了索引,新建外键就正常了,但是这是为什么呢?

------解决方案--------------------
在一对多的关系中,在多的一方会产生一个外键,这个外键没有自动添加索引,当存在从一的一端产生对多的一端的查询时,有可能会在多的一端造成全表查询问题,数据量巨大时会产生严重的性能问题。可以在多的一端的外键上添加索引来解决这个问题。