添加带外键的Hibernate实体

cwxwcias  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在构建一个( Spring 启动)休息服务,我似乎对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
}

这意味着,我获得类A的id和类B的id。如果我想创建类A的实体并将其保存在数据库中,我必须首先检索类B的相应示例,调用setClassB(...),然后将示例保存到数据库中。
我的实体甚至可能有更多的外键到更多的实体,我必须首先检索,包括他们的属性等,只是为了保存我的新实体。
这是应该的方式吗?或者我错过了什么?有没有一种方法可以定义实体,使我可以按照获得外键的方式来使用它们?(我的意思不是:"不要使用休眠")而不先检索其他对象?
只是感觉不对而且不必要。

aydmsdu9

aydmsdu91#

为什么不直接在这些实体之间创建一个双向关系,然后使用classB级联classA的创建呢?这样,您可以立即完成创建/更新,而不必手动检索和设置关系。
在本例中,您获取了要创建的classA的id,还获取了class_b_id,可以使用它来获取classB示例并继续创建classA,classA将被附加到classB。

相关问题