JPA不允许在 OneToOne 或 ManyToOne 映射上使用 @Id 批注。您想要做的是 与共享主键*
进行一对一的实体关联。最简单的情况是使用共享密钥的单向一对一: *
@Entitypublic class Person { @Id private int id; @oneToOne @PrimaryKeyJoinColumn private OtherInfo otherInfo; rest of attributes ...}这样做的主要问题是JPA不支持 OtherInfo
实体中共享主键的生成。鲍尔和金所著的经典书籍《Java
Persistence with
Hibernate》使用Hibernate扩展为问题提供了以下解决方案:
@Entitypublic class OtherInfo { @Id @GeneratedValue(generator = "customForeignGenerator") @org.hibernate.annotations.GenericGenerator( name = "customForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "person") ) private Long id; @oneToOne(mappedBy="otherInfo") @PrimaryKeyJoinColumn public Person person; rest of attributes ...}另外,请参阅此处。



