假设以下
我有两个选择:
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帖子将两个设计分开并分开处理是一个好主意但是我没有提及我的具体问题