0
(EHCacheによる)キャッシュのHibernateコレクションに関する問題が発生しています。Hibernate:コレクションキャッシュが追い出されない
だから、これはコレクションを所有するエンティティです:
@Entity(name = "Message")
@Table(name = "t_message")
public class Message implements Comparable<Message>{
@Id
@Column(name = "message_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "message")
@Sort(type = SortType.NATURAL)
@JsonIgnore
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private SortedSet<Event> events = new TreeSet<>();
// ...
}
その後、他のエンティティに、メッセージに対称的存在である:
@Entity(name = "Event")
@Table(name = "t_event")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Event implements Comparable<Event>, Comparator<Event> {
@Id
@Column(name = "event_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "event_message_id", referencedColumnName = "message_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private Message message;
// ...
}
問題:私はイベント、 "イベント"フィールドを追加し、キャッシュは追い出されません。このフィールドの下にある@Cacheアノテーションを削除すると、それは動作しますが、もちろんキャッシュはありません。
私はこのように私は休止状態の設定ファイルに次の行を追加した(エンティティ操作によって)新しいイベントを挿入するとき、私たちはイベント側からのメッセージにリンクという事実とリンクする必要があります信じて:
<property name="hibernate.cache.auto_evict_collection_cache">true</property>
しかし、それは問題を解決しませんでした。
追加情報:
- その他ManyToOneコレクションキャッシングがプロジェクトに完璧に動作します。
- プロジェクトにネイティブクエリはなく、HQLとエンティティ操作のみです。
- 私はHibernate 4.3.2とEHCache 2.10.4を使用しています。
アドバイスをいただきありがとうございます。