【问题标题】:Hibernate : reference a composite PK as a foreign key in another tableHibernate:在另一个表中引用复合 PK 作为外键
【发布时间】:2015-06-06 05:17:39
【问题描述】:

我有以下两个具有一对多关系的表:

Student
-------
Integer Roll_No (pk)
Integer Class (pk)
.....


Attendance
-------
Long Id (Pk)
Integer Roll_No (fk to Student.Roll_No)
Integer Class (fk to Student.Class)
.....

如何在hibernate中为这两个表做映射。请帮助。提前致谢。

【问题讨论】:

  • JPA / Hibernate OneToMany Mapping, using a composite PrimaryKey 已经提出了类似的问题。尝试使用提供的答案来解决它。从您的问题来看,不清楚您是否在寻找双向解决方案,Roll_NoClass 的类型是什么,它们是否也表示为对象以及关系是什么。 Hibernate 还是 JPA 映射?
  • @andih:我已经用数据类型更新了问题。我正在寻找 Hibernate Mapping 中的双向解决方案。
  • 你只回答了我的部分问题。开放式问题仍然是“Hibernate 还是 JPA 映射?”和“Roll_No 是否只是一个整数还是一个外键”?你看过我提供给你的链接了吗?您是否尝试在答案的帮助下解决问题?卡在哪里?也许你应该阅读Asking about Homework 部分。

标签: java hibernate jpa hibernate-mapping


【解决方案1】:
You can create a composite id class that only have the Student:

@Embeddable
public class Attendance implements java.io.Serializable {

    @Id
    @GeneratedValue
    private Integer id;

    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "Roll_no", updatable = true)
    private Student Roll_no;

    @OneToMany(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "Class", updatable = true)
    Private Student Class;
    // ...
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Student{

    @Id
    public Roll_no  getRoll_no()
    public Class getClass()
    // ...
}

【讨论】:

  • 您的学生没有复合主键。目前尚不清楚为什么将出勤标记为可嵌入以及为什么您的学生课程是抽象的。
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2021-05-25
  • 2016-10-21
相关资源
最近更新 更多