0

今日この問題を発見しましたが、まだ解決策が見つかりません。この時点で休止状態の使用方法を学んでいるので、状況を説明するために最善を尽くします.

私はこの非常に単純なクラスを持っています:

public class Descripcion {
    private long id;
    private String descripcion;
    private AuxTitularidad titularidad = new AuxTitularidad();
    private AuxTitularidad titularidad2 = new AuxTitularidad();

    //getters and setters below... all of them auto-generated
}

そして、これは私のマッピングファイルです

<class name="Descripcion" table="DESCRIPCION">
    <id name="id" type="long" column="id">
        <generator class="identity"></generator>
    </id>
    <property name="descripcion" column="descripcion"/>
    <many-to-one name="titularidad" class="AuxTitularidad" column="id_titularidad1"  />
    <many-to-one name="titularidad2" class="AuxTitularidad" column="id_titularidad2"/>
</class>

このマッピングは私にとってはうまくいきました.「titularidad」と「titularidad2」が同じ値でない限り(同じオブジェクトを参照しない限り)、まったく問題ありません。これが発生すると、hibernate はクラス AuxTitularidad の単一のオブジェクトをフェッチし、それを「titularidad」と「titularidad2」の両方に使用します。

読むためだけにそれらを取得していた場合は問題にならないはずですが、HTML フォームを使用して更新する必要があり、"Description" のインスタンスは "AuxTitularidad" の同じインスタンスへの 2 つの参照を保持しているため、単一の値を保持するだけです。

例:

番号 1: これらは、私の DB に格納されている値です。

 titularidad: 17
 titularidad2: 23

そこで、HTML フォームを使用して更新を行い、次の新しい値を割り当てます。

 titularidad: 30
 titularidad2: 28

動作します!

番号 2: これらは、私の DB に格納されている値です。

 titularidad: 18
 titularidad2: 18

そこで、HTML フォームを使用して更新を行い、次の新しい値を割り当てます。

 titularidad: 12
 titularidad2: 32

うまくいきません。これをDBに保存します:

 titularidad: 32
 titularidad2: 32

HTMLフォームからオブジェクトのバインディングを確認しましたが、正しいです。問題は、「titularidad」と「titularidad2」の両方が同じオブジェクトへの参照を保持していることです(オブジェクトのIDを見ても)。これらを個別のオブジェクトに取得するように休止状態に指示する方法はありますか? ¿いくつかの構成またはパラメータ?

前もって感謝します!

4

1 に答える 1

4

これは予想される動作です。特定のセッションでは、特定のエンティティは1回だけ存在します。

説明エンティティに別のtitularidadを割り当てたい場合は、既存のtitularidadのフィールドを変更しないでください。代わりに、割り当てたいtitularidadへの参照を取得し、この参照を割り当てる必要があります。

Titularidad newTitularidad = session.load(Titularidad.class, newTitularidadId);
Titularidad newTitularidad2 = session.load(Titularidad.class, newTitularidad2Id);
descripcion.setTitularidad(newTitularidad);
descripcion.setTitularidad2(newTitularidad2);
于 2012-07-16T08:22:24.553 に答える