如何解决Spring中使用外键的一对一关系
如何在hibernate中为下表实现一对一的双向关系:
create table persons(
person_id varchar(20) not null,first_name varchar(20) not null,last_name varchar(20) not null,primary key client_fk (person_id)
);
create table roles(
person_id varchar(20) not null,role_name varchar(20) not null,role_description varchar(20) not null,constraint role_person foreign key role_fk (person_id) references person(person_id)
);
我想在 PersonEntity 和 RoleEntity 之间建立关系。
我尝试了许多不同的设置但都没有成功,例如:
@Entity(name = "persons")
@Table(name = "persons")
public class PersonEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
int personId;
@Column(name = "first_name")
String firstName;
@Column(name = "last_name")
String lastName;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "person_id")
private RoleEntity role;
@Entity(name = "roles")
@Table(name = "roles")
public class RoleEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
int personId;
@OneToOne
@JoinColumn(name = "person_id")
private PersonEntity person;
@Column(name = "role_name")
String roleName;
我的目标是创建两个 CrudRepositores(RolesRepository 和 PersonsRepository),以便检索所有已分配角色的人员和所有已分配角色的人员人。
如何实现?
解决方法
我的目标是创建两个 CrudRepositores(RolesRepository 和 PersonsRepository) 以检索具有指定角色的所有人员 以及指定人员的所有角色。
这意味着一个角色属于多个人。这使得这种关系绝对不是@OneToOne。所以你没有走对路。
如果一个人只有1个角色,但1个角色属于多个人,那么你必须使用in
- PersonEntity 类 -> @ManyToOne
RoleEntity role
- RoleEntity 类 -> @OneToMany
List<PersonEntity> personEntities
如果一个人有多个角色,每个角色也属于其他人,那么你需要
- PersonEntity 类 -> @ManyToMany
List<RoleEntity> roleEntities
- RoleEntity 类 -> @ManyToMany
List<PersonEntity> personEntities
如果您的结构具有正确的逻辑,则您的 crud 存储库将起作用。如果不是,您将面临问题。通过试图强制@OneToOne 建立一个不是@OneToOne 的关系就像黑客攻击并试图利用休眠的某些功能来实现你想要的。我认为这不会奏效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。