私は、Hibernate マッピングで次の問題に直面しています。調査にかなりの時間を費やしましたが、類似のケースは見つかりませんでした。扱っている単純なデータベース スキーマについて説明します。
create table point(
POINT_ID integer primary key,
x integer,
y integer);
create table segment(
POINT_A_ID integer references point(POINT_ID),
POINT_B_ID integer references point(POINT_ID),
constraint segment_PK primary key(POINT_A_ID,POINT_B_ID)
);
ご覧のとおり、セグメントは、ペア (POINT_A_ID、POINT_B_ID) によって識別される 2 つのポイント間の単なる線です。この関連付けを Point 側からのみマッピングしたいと考えています。2 つのコレクションが必要であることがわかりました。たとえば、プライベート セット セグメント A、セグメント B。
ここに私のxmlマッピングファイルがあります:
<hibernate-mapping>
<class name="entities.model.Point" table="POINT">
<id name="id" type="java.lang.Long">
<column name="POINT_ID" />
<generator class="native" />
</id>
<property name="x" type="int">
<column name="X" />
</property>
<property name="y" type="int">
<column name="Y" />
</property>
<set name="segmentsA" table="SEGMENT" lazy="false" cascade="all-delete-orphan" >
<key column="POINT_A_ID" not-null="true" update="false" />
<one-to-many class="entities.model.Segment"/>
</set>
<set name="segmentsB" table="SEGMENT" lazy="false" cascade="all-delete-orphan">
<key column="POINT_B_ID" not-null="true" update="false" />
<one-to-many class="entities.model.Segment" />
</set>
</class>
</hibernate-mapping>
と
<hibernate-mapping>
<class name="entities.model.Segment" table="SEGMENT">
<composite-id name="segmentPK" class="entities.model.SegmentPK">
<key-property name="pointAId" >
<column name="POINT_A_ID" />
</key-property>
<key-property name="pointBId">
<column name="POINT_B_ID"/>
</key-property>
</composite-id>
</class>
</hibernate-mapping>
それらの間でいくつかのポイントとセグメントを永続化しようとすると (1 つのセグメント インスタンスを適切なポイント インスタンスのセグメント A とセグメント B セットに追加した)、次のエラーが発生します。
org.hibernate.MappingException: Repeated column in mapping for entity: entities.model.Segment column: POINT_A_ID (should be mapped with insert="false" update="false")
この場合のアドバイスにとても感謝します:)