【问题标题】:Spring data jpa @Onetomany isssue春季数据 jpa @Onetomany 问题
【发布时间】:2020-05-26 10:48:12
【问题描述】:
@Entity
class Hospital{

@Id     
@GeneratedValue 
Private long hospitalId

Private String name;

Private string password;

@Embaded
Private Address address;

@Onetomany(mappedby=Hospital)
Private List<Department> department;

}

@Entity
class Department {

@Id     
@GeneratedValue 

private Long depId;

Private String department;

@Manytoone

@JoinColumn(name="hospitalId")

Private Hospital hospital

}

这里的场景就像第一个医院注册名称、密码、地址,只有在登录后医院才会输入部门详细信息。 我只想在医院获取注册并从特定医院获取部门的详细信息时向部门实体插入外键我想使用外键更新部门实体如何使用 spring data jpa 实现它

【问题讨论】:

    标签: java postgresql hibernate spring-boot spring-data-jpa


    【解决方案1】:

    我认为这就是您要寻找的。

    @Entity
    @Table(name = "Hospital")
    class Hospital{
    
        @Id
        @GeneratedValue
        Private long hospitalId
    
        Private String name;
    
        Private string password;
    
        @Embedded
        Private Address address;
    
        @OneToMany(mappedBy = "hospital", fetch = FetchType.LAZY)
        @JsonIgnore
        Private List<Department> department;
    
    }
    
    @Entity
    @Table(name = "Department")
    class Department {
    
        @Id
        @GeneratedValue
        private Long depId;
    
        Private String department;
    
    
        @JoinColumn(name = "hospitalId")
        @ManyToOne()
        @OnDelete(action = OnDeleteAction.CASCADE)
        Private Hospital hospital;
    
    }
    

    【讨论】:

      【解决方案2】:

      尝试添加级联

      @OneToMany(mappedBy = "class", cascade = [CascadeType.ALL])
      

      Cascade 帮助您使用实体外键插入和更新, 级联类型有不同的值:

      • 全部
      • 坚持
      • 合并
      • 移除
      • 刷新
      • 分离

      参考Baeldung了解所有案例及其用途。

      我希望这会有所帮助。

      【讨论】:

      • 但是在医院注册的时候不会有科室对象。医院只能在登录后添加
      • 是的,但是在你的问题之前的行中 I want to update the department entity using foreign key 所以这个答案基于你的问题。因此,如果您想插入部门,您可以使用医院实体参考直接添加或更新它
      • 请确认我是否理解您的问题,如果我的回答有误,请见谅。
      • 问题是每当我插入医院详细信息 hospitalId 这是部门实体中的外键,如果它被插入,则不会插入我想我可以使用这个外键更新其他字段
      • 在级联中,可以直接从医院插入科室,所以在医院注册后,您可以创建一个新科室并将其添加到列表中,并确保科室与医院有关系,添加可选的@ManyToOne(optional = false,...) 。我不确定这是否有帮助(或者我是否理解你的情况)
      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2013-11-12
      • 2012-03-05
      • 2020-02-20
      • 1970-01-01
      • 2018-11-25
      • 2021-07-31
      相关资源
      最近更新 更多