【问题标题】:How can I join 3 entities JPA?如何加入 3 个实体 JPA?
【发布时间】:2014-08-12 03:14:44
【问题描述】:

我有 3 个实体:Aluno、Turma 和 Modalidade。现在我需要创建 Matricula,这个实体 Matricula 将包含 Aluno、Turma 和 Modalidade 的所有 id 以及其他属性。

一个 Matricula 可以有一个 Aluno,可以有多个 Turma,可以有多个 Modalidade。

实体矩阵,可以有: OneToOne Aluno 一对多 Turma 一对多模式

希望你能理解。

我该怎么做?

【问题讨论】:

  • 第一件事。尝试分层您的实体。 1M 可以有 1A 多 T 对吗?

标签: java hibernate jpa persistence one-to-one


【解决方案1】:

我有一个教程详细介绍了如何使用 Hibernate 注释设置各种关系。你可以找到它here

我将假设您想要使用外键映射的双向关系(如教程中所示,如果这是错误的,您可以在那里找到单向配置),您基本上可以像这样声明你的类:

@Entity
@Table
public class Matricula {

    @Id
    private long matriculaId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "alunoId")
    private Aluno aluno;

    @OneToMany(mappedBy="turma")
    private List<Turma> turmas;

    @OneToMany(mappedBy="modalidade")
    private List<Modalidade> modalidades;
}

@Entity
@Table
public class Turma {
    //Put a unique ID here to be used as PK

    @ManyToOne
    @JoinColumn(name="matriculaId)
    private Matricula matricula;
}

@Entity
@Table
public class Modalidade {

    //Put a unique ID here to be used as PK

    @ManyToOne
    @JoinColumn(name="matriculaId)
    private Matricula matricula;
}

@Entity
@Table
public class Aluno {

    //Put a unique ID here to be used as PK

    @OneToOne(mappedBy="aluno")
    private Matricula matricula;
}

请注意,这是假设您的列名匹配,并且您的数据库设置正确。

希望一切顺利

【讨论】:

  • 感谢您的关注!如果我在 Matricula 的 @OneToMany 中使用 mappedBy,所有 id Turma 和 Modalidade 都不包含在数据库的 Matricula 表中,是这样吗?我希望所有 id 都包含在表 Matricula 中。有没有可能?
  • 不,您不能将一个表的主键包含在另一个表中。每个对象/表的主键应包含在该表中。
  • 我的意思是,是的,可以将表的主键存储在另一个表中,但你永远不应该这样做。它破坏了在数据库表上拥有主键的全部意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 2020-05-22
  • 2022-01-05
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多