2016-07-25 16 views
1

私はCarro Entityを更新しようとすると、次の例外を除いて、単一の領域に対して '読み書き可能'と '読み取り専用'スローされました:同じHibernate第2レベルキャッシュ領域の2つのCacheConcurrencyStrategyのマッピング

ERROR org.hibernate.internal.SessionImpl - HHH000346:管理フラッシュ中にエラーが発生しました[読み取り専用オブジェクトに書き込めません]スレッド "メイン" java.lang.UnsupportedOperationExceptionがで

例外を:読み取り専用オブジェクトに書き込めません

異なる地域の事業体を分離する場合。したがって、同じ地域に2つの異なるタイプの戦略を持つことはできませんか?

Psの:これはあまりにも警告を受信:HHH020007:読み取り専用キャッシュ可変エンティティの


を設定し - >カルロ:

@Entity 
@Table(name = "carro") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "myregion") 
public class Carro implements Serializable 
{ 
    private static final long serialVersionUID = 8467432396096896736L; 

    @Id 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "carro") 
    private String carro; 

    @OneToMany(mappedBy = "carro", fetch = FetchType.LAZY) 
    private List<Pessoa> pessoas = new ArrayList<Pessoa>(); 
} 

- >ペソア:

@Entity 
@Table(name = "pessoa") 
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "myregion") 
public class Pessoa implements Serializable 
{ 
    private static final long serialVersionUID = 8467432396096896736L; 

    @Id 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "nome") 
    private String Nome; 

    @Column(name = "sexo") 
    private String sexo; 

    @Column(name = "idade") 
    private Integer idade; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "carro_id") 
    private Carro carro; 
} 

- > ehcache.xml:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false" 
     monitoring="autodetect" dynamicConfig="true"> 

    <cache name="myregion" maxEntriesLocalHeap="1000" eternal="false" timeToLiveSeconds="1000"> 
     <persistence strategy="none"/> 
    </cache> 

    <cache name="org.hibernate.cache.internal.StandardQueryCache" maxEntriesLocalHeap="1000" eternal="false" timeToLiveSeconds="120"> 
     <persistence strategy="none"/> 
    </cache> 

    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache" maxEntriesLocalHeap="1000" eternal="true"> 
     <persistence strategy="none"/> 
    </cache> 
</ehcache> 

答えて

3

地域にはCacheConcurrencyStrategyが1つ必要です。あなたの場合、PessoaクラスはCarroの後に登録されている必要がありますので、myregionREAD_ONLYに設定されています。

デフォルトでは、エンティティごとに異なる地域ファクトリがあるため、エンティティごとに異なるCacheConcurrencyStrategyを設定できます。

関連する問題