У меня есть 3 класса - Issue, Sprint и EmbeddableId class SprintId.
Я не знаю, как добиться наличия поля jiraInstance
как в классе Issue
, так и в классе Sprint
. Поскольку Issue
не может быть подключен ни к какому Sprint
, я хочу иметь поле jiraInstance
java на Issue
, чтобы отслеживать, в каком экземпляре 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;
заставить hibernate утверждать, что он должен быть insertable = true, updatable = false
, но мне нужно иметь возможность добавить jiraInstance в Issue
, когда он не подключен к какому-либо спринту.