5

Oracleデータベースに対してHibernateAnnotations3.4.0GAおよびHibernateCore3.3.2.GA(現在の安定バージョンとも呼ばれます)を使用しています

base = 1の1対多のマッピングがあり、これは非常に長い間正常に機能しましたが、先週、データベースにインデックス列に値0が含まれているエントリがいくつか見つかり、あらゆる種類の問題が発生しました。

だから私の質問は:それがbase = 1でマップされているときに、1対多の関係のインデックス列に0の値を取得する方法を知っている人はいますか?おそらく、ジェネリックスまたはMappedSuperclassの使用に関連しています。

継承も含まれるため、コードはかなり複雑であることに注意してください。

以下は、クラスの関連する部分です。

// SuperClass of the One side
@MappedSuperclass
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>>
{
  @OneToMany(cascade = CascadeType.ALL)
  @Cascade(
  {
      org.hibernate.annotations.CascadeType.ALL,
      org.hibernate.annotations.CascadeType.DELETE_ORPHAN
  })
  @JoinColumn(name = "parent_id", nullable = false)
  @IndexColumn(name = "position", base = 1, nullable = false)
  private List<Te> elements = new ArrayList<Te>();
}

// Super Class of the Many side
@MappedSuperclass
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject
{
  @ManyToOne
  @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false)
  private Tp parent;

  @Column(name = "position", insertable = false, updatable = false, nullable = false)
  private int position;
}

実際のクラスはこれらを継承し、型パラメーターの具象クラスを提供します。それらはエンティティとしてマップされます。また、id列とversion列、およびその他の多数の属性と参照を指定しますが、手元のマッピングとは関係ありません。

4

1 に答える 1

2

ほぼ2年が経ちましたが、同じ問題の解決策を探しているときに、これに遭遇しました。xmlファイルを介してhbmを使用しているため、これが役立つかどうかはよくわかりません。私たちの場合、問題は逆マッピングでした。あなたの場合のように、リスト(およびインデックス)の制御がリスト要素側(「多く」)にある場合、問題が発生しました。上に移動すると、これが解決しました。これが注釈でどのように行われるのかわかりません。

エラーのもう1つの原因は、AbstractReihungオブジェクトに実際に「要素」を設定した場合です。Hibernateは、遅延ロードされたプロパティにプロキシオブジェクトを使用します。既存のコレクションを変更する代わりにまったく新しいコレクションを設定すると、プロキシオブジェクトが上書きされます。

于 2012-01-19T14:08:06.760 に答える