【问题标题】:Many to one mapping Hibernate多对一映射 Hibernate
【发布时间】:2021-04-07 01:21:29
【问题描述】:

我在休眠中进行多对一映射。我正在使用我之前创建的现有表进行一对多映射(客户和订单),但是当我尝试映射和更新这些表时,我无法做到我不知道应该如何处理?我想插入数据,这意味着我想使用命令行运行器为该客户创建更多订单。

你能帮我解决这个问题吗

感谢您的帮助。

【问题讨论】:

  • 请将您的代码添加为文本。

标签: spring-boot hibernate


【解决方案1】:

映射一对多和多对一关联

这两个关联分别是从欠实体和从属实体的角度看的同一个关联。

    Student     one-to-many     Address
    Address     many-to-one     Student

@OneToMany 注释可以应用于表示关联的映射“多”端的集合或数组的“一”端实体类的字段或属性值。

@ManyToONe 两个实体之间的关系是通过管理“one”端实体的 FK(Foreign key),作为“many”实体表中的一列。


> **Bidirectional one-to-many using ```@JoinColumn```**

@Entity
public class Student{
    @OneToMany(cascade = CasecadeType.ALL)
    @JoinTable(name="Student_FK")
    public set<Address> getAddress(){
       return address;
}
}

一对多端作为欠款端,您必须删除 mappedBy 元素并将@ManyToOne @JoinColumn 设置为可插入且可更新为 false。此解决方案未优化,会产生一些额外的UPDATE Statement

@Entity
public class Address{
    @ManyToOne(cascade = CasecadeType.ALL)
    @JoinColumn(name="STUDENT_FK", insertable = false, updatable = false)
    public Student student;
}

更多详情请查看此链接Link

【讨论】:

  • 如果这个答案对你有用,请投票@Naresh
  • 我可以看到表中的 fk 列,但我想更新订单表中的记录我该怎么办?
  • 我更新了我的答案,请再看看StudentAddress 类。
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 2015-08-20
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多