【问题标题】:OneToOne relationship in Spring where foreignkey are usedSpring中使用外键的一对一关系
【发布时间】:2021-04-04 20:41:36
【问题描述】:

如何在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)
);

我想在 PersonEntityRoleEntity 之间建立关系。

我尝试了许多不同的设置,但都没有成功,例如:

@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;

我的目标是创建两个 CrudRepositoresRolesRepositoryPersonsRepository),以便检索所有分配了角色的人和所有分配了角色的人人。

如何实现?

【问题讨论】:

    标签: java hibernate foreign-keys one-to-one


    【解决方案1】:

    我的目标是创建两个 CrudRepositores(RolesRepository 和 PersonsRepository) 以检索具有分配角色的所有人员 以及指定人员的所有角色。

    这意味着一个角色属于多个人。这使得这种关系绝对不是@OneToOne。所以你没有走对路。

    如果一个人只有 1 个角色,但 1 个角色属于多个人,那么您必须使用 in

    1. PersonEntity 类 -> @ManyToOne RoleEntity role
    2. RoleEntity 类 -> @OneToMany List<PersonEntity> personEntities

    如果一个人有多个角色并且每个角色也属于其他人,那么您需要

    1. PersonEntity 类 -> @ManyToMany List<RoleEntity> roleEntities
    2. RoleEntity 类 -> @ManyToMany List<PersonEntity> personEntities

    如果您的结构具有正确的逻辑,您的 crud 存储库就可以工作。如果没有,您将面临问题。通过试图强制@OneToOne 建立一个不是@OneToOne 的关系就像黑客攻击并试图利用休眠的某些功能来实现你想要的。我认为这不会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多