我已经尝试了这两种方法,并且由于某些原因,我个人更喜欢避免使用复合主键:
I've tried both methods, and personally I prefer avoiding composite primary keys for several reasons:
- 您可以创建一个包含id字段的超类,因此您不必在所有实体中都麻烦它.
- 创建实体变得容易得多
- JPA总体上表现更好
- 引用实体变得更加容易.例如,只需要使用一个数字就可以大大简化在一个集合中存储一堆ID或在网页的查询字符串中指定单个ID的过程.
- 您可以使用在超类中指定的单个equals方法,该方法适用于所有实体.
- 如果您使用JSF,则可以创建一个通用转换器
- 使用数据库客户端时更容易指定对象
但是它也会带来一些不好的地方:
But it brings some bad parts aswell:
- 少量非正规化
- 使用非持久对象(如果应该使用自动生成的ID,应该使用它)在某些情况下可能会带来麻烦,因为相等方法和此类方法需要ID才能正常工作