私はHibernate 5.1.0.Finalを使用します。マイGenericDAO
クラスの主な方法:Hibernateは完全にエンティティの子をリフレッシュしません
public T save(T entity) {
entityManager.getTransaction().begin();
entityManager.persist(entity);
entityManager.getTransaction().commit();
}
public T find(Long entityId) {
T e = (T) entityManager.find(type, entityId);
entityManager.refresh(e);
return e;
}
私はList<Image> images
が含まれているItem
実体を持っています。
@Entity
@Table(name="item")
public class Item extends GenericEntity {
@Column(name="title")
String title;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "item", cascade = {CascadeType.ALL}, orphanRemoval = true)
@NotFound(action = NotFoundAction.IGNORE)
List<Image> images;
@Version
@Temporal(TemporalType.TIMESTAMP)
@Column(name="version")
Date version;
}
@Entity
@Table(name="image")
public class Image extends GenericEntity {
@ManyToOne
@JoinColumn(name="item")
Item item;
@Column(name="image_name")
String imageName;
}
まず、私はgenericDAO.find(id)
方法でItem
をロードする - それは、画像の最新のリストが含まれています。次に、別のRESTメソッドで同じIDを持つItem
をロードし、古いイメージを削除し、新しいイメージを追加してタイトルを変更します。後でItem
をgenericDAO.find(id)
に最初のRESTメソッドでリロードしようとすると、古い画像が表示されます。Item
のタイトルが正しく取得されている間に再び選択されません。
完全に更新されたエンティティをデータベースから取得するにはどうすればいいですか?
'images'フィールドを更新してもよろしいですか? – davidxxx
はい、DBから直接クエリを実行すると変更が表示されます。 – Justas
あなたはどこかでキャッシュを使用します。 Hibernateでレベル2キャッシュを使用しますか?または、アプリケーションのキャッシュメカニズム – davidxxx