繁体   English   中英

添加带有外键的 Hibernate 实体

[英]Add Hibernate entity with foreign key

我正在构建一个(spring boot)rest 服务,我似乎对 Hibernate 和外键或其他什么有一些根本性的误解。

我有两个实体:

@Entity
public class ClassA {

    @Id
    @Column(name = "id", nullable = false)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "class_b", nullable = false)
    private ClassB classB;

  // more properties and getters/setters left out for brevity
}
@Entity
@Table(name = "class_b")
public class ClassB {

    @Id
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "name", nullable = false, length = 100)
    private String name;

  // more properties and getters/setters left out for brevity
}

ClassA 有一个指向 ClassB 的外键。 我希望我的用户能够给我一个 classA 的实例,例如

{ //instance of class A, e.g. via POST
  id: 19,
  class_b_id: 17
}

这意味着,我得到了 class A 的 ID 和 class B 的 ID。如果我想创建 class A 的实体并将其保存在数据库中,我必须首先检索 class B 的相应实例,调用 setClassB(.. .) 然后将实例保存到数据库中。

我的实体甚至可能有更多实体的外键,我必须首先检索这些实体,包括它们的属性等,只是为了保存我的新实体。

这是应该的方式吗? 或者我在这里想念什么? 有没有一种方法可以按照我获取外键的方式使用外键来定义实体? (我不是说:“不要使用休眠”)不首先检索其他对象?

它只是感觉错误和不必要。

为什么不在这些实体之间创建双向关系并使用 classB 来级联 classA 的创建? 这样您就可以立即创建/更新,而不必手动检索和设置关系。

在您的示例中,您获得了要创建的 classA 的 id,还有 class_b_id,您可以使用它来获取 classB 实例并继续创建 classA,它将附加到 classB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM