0

3 つのテーブルは、「analyticalgroups」、「labinstructions」、「observedproperties」です。各テーブルには「id」主キー列があります。

4 番目のテーブル ("analyticalgroups_observedproperties_labinstructions") を使用して、OneToMany 関係を保存したいと考えています。最終的には、出力を次のように構成したいと思います。

analyticalGroup: {
  id: "...",
  observedPropertyLabInstructions: [
    {observedProperty, labInstruction},
    {observedProperty, labInstruction},
    {observedProperty, labInstruction},
    ...etc...
  ]
}

オンラインでいくつかの例をたどりましたが、これを機能させることはできません。問題は、これを試してみると、次のエラーが発生することです。

"message": "リポジトリでエラーが発生しました: PSQLException: エラー: 列が監視されましたpr0_.observedpropertyentitylabinstructionentitymap_id が存在しません\n 位置: 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;

}

うまくいけば、私はこれを必要なだけ明確にレイアウトしました. あなたの助けに感謝します。読んでくれてありがとう!

4

1 に答える 1

0

編集実際には...これは機能しないことがわかりました。必要なデータを正常に取得できますが、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;
于 2016-05-11T17:55:18.267 に答える