我的第一步是从头开始构建一个网页后端,使用Spring Boot,JPA和oracle数据库。在我的数据库中,有一个包含一些信息的User表。另外还有三个表,Worker,Customer和Admin。用户可以具有多个角色,例如,用户可以同时是Worker和Admin。 (我认为这是EER图中所述的重叠关系,如果我错了,请纠正我) 现在,我想在Spring引导中使用JPA来实现这种关系,但是我不知道我应该如何设计bean。有人可以给我提示或类似的例子吗?
如果Spring JPA不是实现这种关系的好方法,或者它太复杂以至于我无法理解。 有没有更好的方法来重组我的数据库表?
我已经研究了JPA继承,例如这篇帖子Spring Data Repository with Inheritance.JOINED,但是由于我不太了解其背后的机制,因此我无法使我的代码正常工作
这是我的数据库表的示例:
User(Id, username, password, ...)
Worker(Id, user_id, salary, ...)
Admin(Id, user_id, team_name, ...)
Customer(Id, user_id, account_balance, ...)
ps:如作业要求所述,由于JPA可以处理关系,因此我不认为在数据库中使用主键或外键。
答案 0 :(得分:0)
user-> worker是一对一关系,因为用户只能是一个worker。用户->管理员和用户->客户也是如此。您可以找到下面的模型代码。
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//...
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private Worker worker;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private Admin admin;
// ... getters and setters
}
@Entity
@Table(name = "worker")
public class Worker {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//...
@OneToOne (mappedBy = "worker")
private User user;
}