Jpa 如何拆分实体的特定属性并将其保存在单独的表中,并使用id进行关联?

Jpa 如何拆分实体的特定属性并将其保存在单独的表中,并使用id进行关联?,jpa,Jpa,有两个实体文档和文档数据。现在,我如何获取包含字段uuid的字段dataUUID,该字段是在使用DocumentData实体保存字节[]时生成的 @Entity(name = "DOCUMENT_DETAILS") public class Document extends BaseEntity { @OneToOne(targetEntity = DocumentData.class, casacade = Cascade.ALL) @JoinColumn(name = "DA

有两个实体文档和文档数据。现在,我如何获取包含字段uuid的字段dataUUID,该字段是在使用DocumentData实体保存字节[]时生成的

@Entity(name = "DOCUMENT_DETAILS") 
public class Document extends BaseEntity {

   @OneToOne(targetEntity = DocumentData.class, casacade = Cascade.ALL)
   @JoinColumn(name = "DATA_UUID", foreignKey = @ForeignKey(name = "DATA_UUID_ID")
   private String dataUUID;

   @Column(name = "BACK_UP_NAME")
   private String backUpName;
}

@Entity(name = "DOCUMENT_DATA")
public class DocumentData {

  @Id
  @GeneratedValue(generator = "system-uuid")
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  private String uuid;

  @Column(name = "DATA")
  @Lob
  private byte[] data;

}
每个实体必须指定一个
Id
<代码>文档没有。因此,您需要告诉JPA提供商,一方的身份依赖于另一方:通常称为具有共享主键的
OneToOne

为此,您需要使关系具有双向性,并将
Id
注释添加到关系中

在我看来,将DocumentData作为依赖实体更有意义:

@Entity(name = "DOCUMENT_DETAILS") 
public class Document  {

   @Id
   @GeneratedValue(generator = "system-uuid")
   @GenericGenerator(name = "system-uuid", strategy = "uuid")
   @Column(name = "DATA_UUID")
   private String dataUUID;

   @Column(name = "BACK_UP_NAME")
   private String backUpName;

   @OneToOne(mappedBy = "document");
   private DocumentData data;
}

@Entity(name = "DOCUMENT_DATA")
public class DocumentData {

  @Id //depends on Document for its ID
  @OneToOne
  @JoinColumn(name = "DATA_UUID", foreignKey = @ForeignKey(name = "DATA_UUID_ID")
  private Document document;

  @Column(name = "DATA")
  @Lob
  private byte[] data;
}
保存时,需要确保正确设置了关系的双方:

将其封装在文档中的setter中是有意义的:

public void setData(DocumentData data){
    this.data = data;
    data.setDocument(this);
}
然后:


还有另一种解决方案,
DocumentData
可以是一个
可嵌入的
而不是一个独立的实体,但是我不想讨论这个问题。

Id是从BaseEntity继承来的。上面给出的答案是应该如何对其建模,从而消除对
BaseEntity
Document doc = new Document();
DocumentData data = new DocumentData();
doc.setData(data);
//save