具有唯一外键的表的冗余ID?

时间:2019-01-13 16:31:13

标签: java database hibernate foreign-keys one-to-one

我正在学习如何使用Hibernate,并且我有一个与具有一对一关系的表的ID有关的问题。

有两个表EmployeeAccount具有一对一的关系。 Employee的主键是员工ID。我想将此ID用于Account,并且我知道可以在Account表中将其定义为外键。

@Entity
@Table
public class Employee
{
    @Id
    private int employeeId;
}

@Entity
@Table
public class Account
{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int tempId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "employeeId", referencedColumnName = "employeeId", nullable=false, insertable=false, updatable=false, foreignKey = @ForeignKey(name="FK_Account_Employee"))
    private Employee employee;
}

请注意,Account还有一个我不需要的附加ID字段,因为员工ID外键是唯一的。如果删除tempId,则在运行时会出现异常。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.company.entity.Account

是否可以在没有此附加ID的情况下声明Account

1 个答案:

答案 0 :(得分:0)

您可能要使用@PrimaryKeyJoinColumn批注。它用于在一对一和多对一关系上保留单个唯一键,该键的作用与主键和外键相同。查找下面的文档:

https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_and_ManyToOne_Relationships