数据库设计与jpa设计之间的契约差异

时间:2016-12-01 18:41:02

标签: java jpa java-ee entity

假设以下

  • 我的用户名是somemail@mail.com,此邮件可能分配了一个或多个角色(即管理员,主管,操作员)
  • 您一次只能使用一个角色登录(也就是说,如果您以管理员身份登录,则不应加载该角色 主管,您只需要具有与之连接的特定角色信息

我有两个选择:

1)在数据库表和jpa实体中保留User-Role as OneToMany-ManyToOne之间的关系

@Entity
@Table(name = "User")
public class User{
//properties
@OneToMany
private Collection<Role> roles
//getters & setters
}

@Entity
@Table(name = "Role")
public class Role{
//properties
@ManyToOne
private User user;
//getters & setters
}

所以当我需要通过jpa从数据库中检索信息时我必须写 像这样的东西:

select user from User as user where user.mail='somemail@mail.com' and user.roles.id=1

2)将数据库表保留为OneToMany并将jpa关系修改为OneToOne

@Entity
@Table(name = "User")
public class User{
//properties
@OneToOne
private Role roles
//getters & setters
}

@Entity
@Table(name = "Role")
public class Role{
//properties
@OneToOne
private User user;
//getters & setters
}

因此,当我需要通过jpa从数据库中检索信息时,我必须写 像这样的东西:

select user from User as user where user.mail='somemail@mail.com' and user.role.id=1

它会返回一行,我可以用这样的东西来回复这个用户 user.getRole(); (没有收集,在这种特定情况下似乎是不必要的)

所以我的具体问题是,在这样的情况下,设计(数据库和jpa)之间是否存在差异是一个好主意 也许在数据库中有意义的是某种类型的关系,但在java(JPA)中没有?

根据this帖子将两个设计分开并分开处理是一个好主意但是我没有提及我的具体问题

0 个答案:

没有答案