【发布时间】:2021-05-19 06:34:28
【问题描述】:
我有 3 个类 - Issue、Sprint 和 EmbeddableId 类 SprintId。
我不知道如何在 Issue 和 Sprint 类中实现 jiraInstance 字段。由于Issue 可能未连接到任何Sprint,我想在Issue 上设置jiraInstance java 字段来跟踪在哪个jira 实例中创建了这个特定问题。当它连接到Sprint 时,我只想将jiraInstance 作为其复合键的一部分。但下面的映射给了我:
Caused by: org.hibernate.DuplicateMappingException: Table [issue] contains physical column name [jira_instance] referred to by multiple logical column names: [jira_instance], [jiraInstance]
类:
class Issue {
@ManyToOne()
@JoinColumns({
@JoinColumn(
name = "sprint_id",
referencedColumnName = "sprint_id"),
@JoinColumn(
name = "jira_instance",
referencedColumnName = "jira_instance")
})
private Sprint lastSprint;
//this field causes clash with 'jira_instance' in @JoinColumn
private String jiraInstance;
}
class Sprint {
@EmbeddedId
private SprintId id;
}
class SprintId implements Serializable {
@Column(name = "sprint_id")
private String sprintId;
@Column(name = "jira_instance")
private String jiraInstance;
}
将@Column 添加为:
@Column(name="jira_instance")
private String jiraInstance;
导致休眠声称它必须是insertable = true, updatable = false,但我需要能够将jiraInstance 添加到Issue,当它没有连接到任何冲刺时。
【问题讨论】:
标签: hibernate many-to-one composite-key