2017-12-05 7 views
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を使用しています。

アドバイスをいただきありがとうございます。

答えて

0

[OK]を、単に「カスケード」パラメータはメッセージのイベントフィールドの@OneToMany注釈に欠けていたことを考え出し:

@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY) 
@JoinColumn(name = "event_message_id", referencedColumnName = "message_id") 
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
private Message message; 

を解決!

関連する問題