java - Spring中使用外键的OneToOne关系
问题描述
如何在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 个角色属于多个人,那么您必须使用
- PersonEntity 类 -> @ManyToOne
RoleEntity role
- RoleEntity 类 -> @OneToMany
List<PersonEntity> personEntities
如果一个人有多个角色并且每个角色也属于其他人,那么你需要
- PersonEntity 类 -> @ManyToMany
List<RoleEntity> roleEntities
- RoleEntity 类 -> @ManyToMany
List<PersonEntity> personEntities
如果您的结构具有正确的逻辑,那么您的 crud 存储库将起作用。如果没有,您将面临问题。通过试图强制@OneToOne 建立一个不是@OneToOne 的关系就像黑客攻击并试图利用休眠的某些功能来实现你想要的。我认为这不会很好。
推荐阅读
- react-native - 如何在 React Native Expo 中实现 Processingview?
- java - 如何在 Java 中将字符串“Weeelcommme tttto Unnnnnicommmerce”转换为“Welcome to Unicommerce”?
- java - java中两个HashMap的点积?
- ruby-on-rails - 如何将ace编辑器的代码和格式属性保存到Rails中的数据库中
- windows - 如何使用 Windows 主机文件从另一台笔记本电脑或系统访问我的网站 URL
- r - 如何在R中的循环中导出每个输出?
- angular - 按属性名称获取元素 - Angular 测试
- rundeck - 导入失败:已为元素“选项”指定属性“名称”
- wordpress - 带有联系表 7 的国家、州和城市
- django - from django.urls import (#noqa ModuleNotFoundError: No module named 'django.urls'