您的JPA
@Id不需要匹配数据库PK列。只要它是唯一的,那么这就是所有要紧的事情,并且由于关联的列是自动递增的列,因此会是这种情况。
从https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing:
JPA Id不必总是与数据库表的主键约束匹配,也不需要主键或唯一约束。
因此,尽管可以按照
PRIMARY KEY (id_operation,id_menu)看起来的方式配置关联表的PK,但
id_operation通过自动递增,它可以单独作为PK,因此可以将操作映射如下:
@Entitypublic class Operation{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = "id_menu") private Menu menu;}如果创建相关的IDClass,则可以如下映射OperationRole。有关此方案以及ID类如何查找的示例,请参见:
https://zh.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Example_JPA_2.0_ManyToOne_id_annotation
@Entity@IdClass(OperationRolePk.class)public class OperationRole{ @Id @ManyToOne @JoinColumn(name = "id_operation") private Operation operation; @Id @ManyToOne @JoinColumn(name = "id_menu") private Menu menu; @Id @ManyToOne @JoinColumn(name = "id_user") private User user;}


