1

私は中間エンティティクラスを使用して追加の列を結合可能にマップしますが、関連するテーブルの両方の fkey から Id が生成される限り、正常に機能します。

同じエンティティ クラスからコンポジット ID に 3 列目の「リビジョン」を実装したいのですが、通常のプロパティ マッピングで使用する必要があります。複合 ID マッピングは正常に機能しますが、「リビジョン」の通常のマッピングは機能しません。

この問題に対して冗長なデータ/列を使用せずに良い解決策を見つけたことはありませんが、extracolumns を使用してジョイント可能オブジェクトにエンティティクラスを使用するのが一般的な方法である理由は何でしょうか?

これを正しくマッピングする方法についての情報、またはそれに関する有益なリンクに感謝します。助けてくれてありがとう。

" Initial SessionFactory creation failed.org.hibernate.MappingException: An association from the table backlogaufgabe refer to an unmapped class: int " は、このマッピングで表示されます:

<hibernate-mapping package="app.domain">
 <class mutable="false" name="app.domain.BacklogAufgabe" table="backlogaufgabe">
  <composite-id class="BacklogAufgabe$Id" name="id">
   <key-property access="field" column="id_backlog" name="backlogId"/>
   <key-property access="field" column="id_aufgabe" name="aufgabeId"/>
   <key-property access="field" column="revision" name="revisionId"/>
  </composite-id>
  <property column="datum" name="datum" not-null="true" type="date"/>
  <property column="rang" name="rang" not-null="true" type="int"/>

  <property column="revision" name="revision" not-null="true" type="int"/>

  <property column="aufw_schaetzung" name="aufwSchaetzung" not-null="true" type="int"/>
  <property column="aufw_messung" name="aufwMessung" not-null="true" type="int"/>
  <many-to-one cascade="save-update" column="id_aufgabe" insert="false" lazy="false"
    name="aufgabe" not-null="true" update="false"/>
  <many-to-one cascade="save-update" column="id_backlog" insert="false" lazy="false"
    name="backlog"  not-null="true" update="false"/>
  <many-to-one cascade="save-update" column="revision" insert="false" lazy="false"
    name="revision" not-null="true" update="false"/>
 </class>
</hibernate-mapping>

SQL:

 CREATE TABLE backlogaufgabe
 (
   id serial NOT NULL,
   id_backlog integer NOT NULL,
   id_aufgabe integer NOT NULL,
   revision integer NOT NULL,
   datum date NOT NULL,
   rang integer NOT NULL,
   aufw_schaetzung integer,
   aufw_messung integer,
   CONSTRAINT backlogaufgabe_pkey PRIMARY KEY (id),
   CONSTRAINT backlogaufgabe_id_aufgabe_fkey FOREIGN KEY (id_aufgabe)
       REFERENCES aufgabe (id) MATCH SIMPLE
       ON UPDATE CASCADE ON DELETE RESTRICT,
   CONSTRAINT backlogaufgabe_id_backlog_fkey FOREIGN KEY (id_backlog)
       REFERENCES backlog (id) MATCH SIMPLE
       ON UPDATE CASCADE ON DELETE RESTRICT
 )
 WITH (
   OIDS=FALSE
 );
4

1 に答える 1

0

テーブルを作成するときは、リビジョンを主キーとして配置するようにしてください。マッピング ファイルで気付いたように、すでに主キーであるとは言及していませんでしたIDが、代わりにリビジョンを主キーとして追加しましたが、これは実際のテーブルには当てはまりません。私の言いたいことがわかるなら。そのため、id の代わりにリビジョンを主キーとして配置する必要があります。

これを試して:

CREATE TABLE backlogaufgabe
(
   id_backlog integer NOT NULL,
   id_aufgabe integer NOT NULL,
   revision integer NOT NULL,
   datum date NOT NULL,
   rang integer NOT NULL,
   aufw_schaetzung integer,
   aufw_messung integer,
   CONSTRAINT backlogaufgabe_pkey PRIMARY KEY (revision),
   CONSTRAINT backlogaufgabe_id_aufgabe_fkey FOREIGN KEY (id_aufgabe)
       REFERENCES aufgabe (id) MATCH SIMPLE
       ON UPDATE CASCADE ON DELETE RESTRICT,
   CONSTRAINT backlogaufgabe_id_backlog_fkey FOREIGN KEY (id_backlog)
       REFERENCES backlog (id) MATCH SIMPLE
       ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
   OIDS=FALSE
);
于 2011-06-30T12:04:01.250 に答える