休止IndexColumn 0の値は、ベース= 1でマッピング
-
24-09-2019 - |
質問
我々は、Oracleデータベースに対してHibernateのアノテーション3.4.0GAと休止状態のコア3.3.2.GA(また、現在の安定したバージョンとして知られている)を使用している
我々はloooong時間のために罰金を働いたベース= 1と1対多のマッピングを持って、まだ先週、私たちはインデックス列は、あらゆる種類の問題を引き起こした0の値が含まれ、データベース内のいくつかのエントリを見つけました。
だから、私の質問は:それは= 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とバージョン列を指定するだけでなく、他の属性と参照のトンが、手元のマッピングに関連した何ています。
解決
私はそれがほぼ二年をされている知っているが、同じ問題の解決策を検索しながら、私はこれにつまずきました。私はかなり確実で、これが役立つ場合じゃないので、私たちは、xmlファイルを経由してHBMを使用しています。 我々の場合には問題が逆マッピングしました。リスト(インデックス)以上のコントロールがリスト要素の側にいた場合は(「多」)あなたのケースのように、我々は問題を抱えていました。それを移動すると、これを解決しました。これは注釈で行われているのか分からない。
あなたがacctuallyあなたAbstractReihungオブジェクトの「要素」を設定した場合、エラーの別の原因は、することができます。 Hibernateは遅延ロードされた性質のためのプロキシオブジェクトを使用しています。あなたは既存のものを・修正するのではなく、まったく新しいコレクションを設定する場合は、プロキシオブジェクトを上書きします。