如何在春季启动jpa中使用外部ID作为主要ID?
有没有办法使用另一个实体的主键作为主键而不使用Embeddable或Id类。例如:如何在春季启动jpa中使用外部ID作为主要ID?
@Table(name = "employee")
@Entity
public class Employee implements Serializable {
@Id
@JoinColumn(name = "person_id")
private Person person;
这里,Person是另一个实体,and person_id是主键。 在此先感谢
是的,如果这是唯一放慢参数构建的PK,你可以做这样的
public class Employee implements Serializable {
@Id
@Column(name="person_id")
private Long personId;
@JoinColumn(name = "person_id")
private Person person;
但是,如果是这样的话是没有用做的,如果员工有相同的主键然后他们应该在同一个表中,不需要将它们分开在两个表中。
在我们所处理的含有人那么我们需要创建一个embedable键复合主键的情况下:
@Embeddable
public class CompositeKey{
@Column(name="person_id")
private Long personId;
... // other attributes
}
public class Employee implements Serializable {
@EmbeddedId CompositeKey employeeId;
@JoinColumn(name = "person_id")
private Person person;
另需注意,这里是你的关系的注释,你应该让你的人OneToOne注解参考:
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
感谢您的回答。我已经熟悉这样的东西。不想使用单独的表格或只能嵌入一个字段。也许,将来会有这方面的工作。虽然 – user2083529
对我来说似乎Employee
可以延长Person
?如果是这种情况,那么继承就会以“自然”的方式进行。
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Person implements Serializable {
@Id
@GeneratedValue
@Getter
private Long id;
}
@Entity
public class Employee extends Person implements Serializable {
}
因此,如果我从Employee中删除一行,那么它也会从Person表中删除?或者如果两个表中的两列具有相同的名称但目的不同,会发生什么? – user2083529
@ user2083529 1st是的。我不知道为什么其他人应该使用相同的ID,除非想指出**相同**'实体'。第二,你可以在继承类中重写字段,但我不会那样做,但是如果可能的话,可以根据用途更好地命名字段。 – pirho
我会投票给它。尽管这对我来说不是一个解决方案。 – user2083529
'Person'&'Employee' @OneToOne有关吗? – pirho