我遇到了一些SO讨论和其他帖子(例如,此处、此处和此处),其中将复合主键与JPA一起使用被描述为尽可能避免的事情,或者由于遗留数据库或具有“毛茸茸”的必要性角落案例。由于我们正在从头开始设计一个新数据库并且没有任何遗留问题需要考虑,因此建议或者更安全地避免使用JPA(Hibernate或EclipseLink?)的复合主键。
我自己的感觉是,由于JPA引擎足够复杂,而且当然,像所有软件一样,并非没有错误,最好忍受非规范化表而不是忍受与复合主键相关的错误运行的恐惧(基本原理因为数字单列主键和外键是 JPA 引擎支持的最简单的用例,因此它应该尽可能没有错误)。