私のコードには3つのエンティティが含まれています:
@Entity
public class Data implements Serializable {
...
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Bit.class,mappedBy = "data")
private Collection<Bit> bit;
@OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Linked.class,mappedBy = "data")
private Collection<Linked> linked;
}
@Entity
public class Linked implements Serializable {
...
@EmbeddedId
private LinkIdPK id;
@ManyToOne(optional=true,fetch = FetchType.EAGER,targetEntity = Data.class)
private Data data;
}
@Entity
public class Bit implements Serializable {
...
@EmbeddedId
private BitIdPK id;
@MapsId("data")@ManyToOne(optional=true,targetEntity = Data.class)
private Data data;
データのインスタンスを1つ取得するために、Springリポジトリを使用して検索を実行しています。データベースからクエリしている要素には、データベースに「3ビット」要素と「1リンク」要素があることを知っています。
のビット要素をループすると、Data.bit
3つの要素が見つかります。これは正常です。
しかし、のリンクされた要素をループするData.linked
と、同じオブジェクトを指している3つの要素が見つかりますが、1つの要素しか期待していませんでした。
データベースに1ビット要素を追加しようとData.linked
しましたが、同じオブジェクトを指す4つの要素が見つかりました。
それは正常な動作ですか?それは私のコードのバグですか、それともHibernateのバグですか?
最後に、休止状態のチームから回答を得ました。これは既知の問題のようで、現時点では回避策しかありません。コレクションの@Fetch(value = FetchMode.SUBSELECT)
1つに注釈を追加しOneToMany
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加