首页 > 解决方案 > JPA 使用 Null 保存外键

问题描述

我有 2 个实体类,该实体的主键是另一个的复合键的一部分。

@Data
@Entity
@Table(name = "objectone")
public class ObjectOne {

  @Id
  @GeneratedValue(generator = "uuid2")
  @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
  @Type(type = "uuid-char")
  private UUID id;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "objectOneId", updatable = false)
  Set<ObjectTwo> ObjectTwoList;

这是具有复合键的对象的实体类

@Data
@Entity
@Table(name = "objecttwo")
@IdClass(ObjectTwoKey.class)
public class ObjectTwo {
  @Id
  @NotNull
  private UUID objectOneId;
  @Id
  @NotNull
  private UUID triggerWorkOrderId;
  @Id
  @NotNull
  @Column(name = "status")
  @Enumerated(EnumType.STRING)
  private Status status;

<-- other fields ommitted ->
}

如果我构建一个 ObjectOne 对象,我还会将 objectTwo 添加为一组:

    objectOne.setObjectTwoList(Collections.singleton(objectTwo));

    ObjectOne save = repo.save(objectOne);

save将包含 objectTwo 的集合,但外键 (objectOneId) 设置为 null,因此当我尝试使用 检索它时repo.findById,我只会得到 objectOne 但 objectTwo 不在列表中。我在这里做错了什么?

标签: javahibernatejpa

解决方案


推荐阅读