首页 > 解决方案 > OneToOne 单向映射到复合键中的一列

问题描述

我想对嵌入键内的字段进行单向 OneToOne 映射。我已经尝试了 2 天。我无法继续进行。非常感谢任何帮助。以下是我的实体。在这里,我试图将 AuditMetaData 中的 VALUE_REF 列映射到 ValueMetaData 的 VALUE_ID 列。VALUE_ID 是嵌入 ID 的一部分。

审计元数据类

@Entity
@Getter
@Setter
public class AuditMetaData{ 
   private Long id;
   private String tableName
   private String functionalTableName
   
   @OneToOne
   @JoinColumn(name="VALUE_REF", referencedColumnName="VALUE_ID")
   private AuditValueMeta valueMeta
}

AuditValueMeta.class

@Entity
@Getter
@Setter
public class AuditValueMeta{ 
       
     @EmbeddedId
     private ValueMetaPK id;
   
     private String value
 }

@Embeddable
@Getter
@Setter
public class ValueMetaPK{
  
  @Column(name="ID")
  private Integer id;
  
  @Column(name="VALUE_ID")
  private String valueId; 
}

请忽略任何语法错误。

标签: hibernatejpahibernate-mapping

解决方案


这应该有效:

@Embeddable
public class ValueMetaPK{
  
  @Column(name="ID")
  private Integer id;
  
  @ManyToOne
  @JoinColumn(name="VALUE_ID")
  private AuditValueMeta auditValueMeta; 
}

或者:

@Entity
public static class AuditMetaData{
    @Id
    private Long id;
    private String tableName;
    private String functionalTableName;

    @OneToOne(mappedBy = "auditMetaData")
    private AuditValueMeta valueMeta;
}

@Entity
@IdClass( ValueMetaPK.class )
public static class AuditValueMeta{

    @Id
    @OneToOne
    @JoinColumn(name = "VALUE_ID")
    private AuditMetaData auditMetaData;

    @Id
    @Column(name="ID")
    private Integer id;

    private String value;
}

public static class ValueMetaPK implements Serializable {
    private Integer id;

    private AuditMetaData auditMetaData;
}

有关映射的更多详细信息,请参阅休眠 ORM 文档


推荐阅读