Java 如何在spring boot jpa中使用外部id作为主id?
是否有一种方法可以使用另一个实体的主键作为主键,而不使用可嵌入类或Id类。e、 g:Java 如何在spring boot jpa中使用外部id作为主id?,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,是否有一种方法可以使用另一个实体的主键作为主键,而不使用可嵌入类或Id类。e、 g: @Table(name = "employee") @Entity public class Employee implements Serializable { @Id @JoinColumn(name = "person_id") private Person person; 这里,Person是另一个实体,Person_id是主键。 提前感谢是的,如果这是构建PK的唯一参数,您
@Table(name = "employee")
@Entity
public class Employee implements Serializable {
@Id
@JoinColumn(name = "person_id")
private Person person;
这里,Person是另一个实体,Person_id是主键。
提前感谢是的,如果这是构建PK的唯一参数,您可以这样做
public class Employee implements Serializable {
@Id
@Column(name="person_id")
private Long personId;
@JoinColumn(name = "person_id")
private Person person;
但如果是这种情况,那么这样做是没有用的,如果雇员有相同的主键,那么他们应该在同一个表中,不需要将他们分成两个表
如果我们处理的是包含person的复合主键,那么我们需要创建一个可嵌入键:
@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;
另一个注意事项是,您的关系注释在哪里,您应该在您的个人参考上有OneTONE注释:
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
对我来说,
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 1st Yes。我不知道为什么要使用相同的Id,除非要指向相同的“实体”。第二,您可以在继承类中重写字段,但我不会这样做,而是尽可能根据目的更好地命名字段。我将投票表决。虽然这在我的案例中不是一个解决方案。@user2083529也许你可以添加一些用例/为什么你想在你的问题中做这样的事情?是不是你必须生活在一些你不能改变的db设计中?是的,db设计有问题。我想实现KISS()。使用外键作为主键将节省我的服务器的大量计算时间和我编写一些代码的时间。
Person
&Employee
@OneToOne是否相关?