3 таблицы - это «аналитические группы», «labinstructions», «observproperties». Каждая таблица имеет столбец первичного ключа «id».Соедините 3 таблицы, используя javax.persistence в отношениях OneToMany
Я хотел бы использовать 4-й стол ("analyticsroups_observedproperties_labinstructions") для хранения отношений OneToMany. В конце концов, я хотел бы выход быть структурирован что-то вроде этого:
analyticalGroup: {
id: "...",
observedPropertyLabInstructions: [
{observedProperty, labInstruction},
{observedProperty, labInstruction},
{observedProperty, labInstruction},
...etc...
]
}
Я следовал некоторым примерам в Интернете, но не могу получить эту работу. Проблема заключается в том, когда я пытаюсь это я получаю следующее сообщение об ошибке:
"message" : "Error occurred at repository: PSQLException: ERROR: column observedpr0_.observedpropertyentitylabinstructionentitymap_id does not exist\n Position: 6550", "errorCode" : "gaia.domain.exceptions.RepositoryException",
Вот структура для присоединения таблицы.
CREATE TABLE analyticalgroups_observedproperties_labinstructions
(
analyticalgroupid character varying(36) NOT NULL,
labinstructionid character varying(36) NOT NULL,
observedpropertyid character varying(36) NOT NULL,
CONSTRAINT fk_analyticalgroups_observedproperties_labinstructions_groupid FOREIGN KEY (analyticalgroupid)
REFERENCES analyticalgroups (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT fk_analyticalgroups_observedproperties_labinstructions_labinstr FOREIGN KEY (labinstructionid)
REFERENCES labinstructions (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT fk_analyticalgroups_observedproperties_labinstructions_observed FOREIGN KEY (observedpropertyid)
REFERENCES observedproperties (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
)
@Entity
@Data
public class AnalyticalGroupEntity {
public static final String ENTITY_NAME = "analyticalGroups";
public static final String JOIN_OBSERVEDPROPERTIES_LABINSTRUCTIONS_TABLE_NAME =
ENTITY_NAME +
IDomainEntity.UNDERSCORE +
ObservedPropertyEntity.ENTITY_NAME +
IDomainEntity.UNDERSCORE +
LabInstructionEntity.ENTITY_NAME;
@Id
@Column(name = IDomainEntity.ID_KEY, nullable = false, columnDefinition = IDomainEntity.COLUMN_TYPE_UUID)
private String id;
@OneToMany
@JoinTable(
name = JOIN_OBSERVEDPROPERTIES_LABINSTRUCTIONS_TABLE_NAME,
joinColumns = @JoinColumn(name = LabInstructionEntity.ID_KEY, referencedColumnName = IDomainEntity.ID_KEY, table = "labinstructions")
)
@MapKeyJoinColumn(name = ObservedPropertyEntity.ID_KEY, referencedColumnName = IDomainEntity.ID_KEY, table = "observedproperties")
private Map<ObservedPropertyEntity, LabInstructionEntity> observedPropertyLabInstructions;
}
Надеюсь, я положил все это, как ясно по мере необходимости. Ваша помощь очень ценится. Спасибо за прочтение!
Можете ли вы обновить свой вопрос, чтобы четко показать взаимосвязь между таблицами? –
Что могло бы сделать это более понятным для вас? В таблице объединений «analygroups_observedproperties_labinstructions» показаны 3 внешних ключа, по 1 на каждую из трех других таблиц. – HankScorpio