hibernate - 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;
}
请忽略任何语法错误。
解决方案
这应该有效:
@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 文档。
推荐阅读
- javascript - if else 语句或多个 or 条件
- angular - 是否可以通过angulartics2避免页面跟踪到GA的根路径?
- sql - 如果没有找到行,SQL如何返回'0'
- c# - 更新范围返回 InvalidOperationException
- javascript - InertiaJS 如何为标签使用“嵌套布局”?
- angular - Angular lite-server 导致查看空白页面
- python-3.x - 在 requests.session() 中设置标头会产生超时问题(socket.timeout:读取操作超时)
- bash - 使用 read line 读取多行 do
- regex - VBA 检查字符串是否与单词完全匹配
- javascript - Vue-Apexcharts 饼图总计未显示