春季JPA表示的重叠关系

时间:2019-06-05 00:30:08

标签: database spring oracle jpa

我的第一步是从头开始构建一个网页后端,使用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可以处理关系,因此我不认为在数据库中使用主键或外键。

1 个答案:

答案 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;

}