2016-05-11 2 views
0

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; 

} 

Надеюсь, я положил все это, как ясно по мере необходимости. Ваша помощь очень ценится. Спасибо за прочтение!

+0

Можете ли вы обновить свой вопрос, чтобы четко показать взаимосвязь между таблицами? –

+0

Что могло бы сделать это более понятным для вас? В таблице объединений «analygroups_observedproperties_labinstructions» показаны 3 внешних ключа, по 1 на каждую из трех других таблиц. – HankScorpio

ответ

0

Редактировать На самом деле ... получается, что это не сработает. Он успешно получает данные, которые я хочу, buuuuut также удаляет каждую строку в таблице соединений всякий раз, когда я делаю запрос GET * flip table *

Так странно!

@OneToMany 
@JoinTable(
     name = JOIN_OBSERVEDPROPERTIES_LABINSTRUCTIONS_TABLE_NAME, 
     joinColumns = @JoinColumn(name = "analyticalgroupid", referencedColumnName = IDomainEntity.ID_KEY, table = "labinstructions"), 
     inverseJoinColumns = @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> observedPropertyEntityLabInstructionEntityMap; 
Смежные вопросы