【问题标题】:OneToOne unidirectional mapping to one column in a composite keyOneToOne 单向映射到复合键中的一列
【发布时间】:2021-07-13 08:05:12
【问题描述】:

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

AuditMetaData.class

@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; 
}

请忽略任何语法错误。

【问题讨论】:

  • @AjaySankaran 我刚刚注意到,如果您需要使用一对(ID,VALUE_ID)进行识别,您将如何仅通过VALUE_REF 识别AuditValueMeta。由于ERROR: there is no unique constraint matching given keys for referenced table,您无法创建foreign key (value_ref) references AuditValueMeta(value_id)

标签: hibernate jpa hibernate-mapping


【解决方案1】:

这应该可行:

@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;
}

有关映射的更多详细信息,请参阅the hibernate ORM documentation

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2020-03-18
    • 2014-05-17
    • 1970-01-01
    • 2015-08-24
    • 2021-06-01
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多