2016-10-14 7 views

答えて

3

:私は、データをフェッチするために春JpaRepositoryを使用

//hb annotations 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "user") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user") 
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "details") 
    private Details details; 

    //getters, setters, constructors etc. 

} 

//hb annotations 
public class Details { 

    @GenericGenerator(name = "generator", strategy = "foreign", 
    parameters = @Parameter(name = "property", value = "user")) 
    @Id 
    @GeneratedValue(generator = "generator") 
    @Column(unique = true, nullable = false) 
    private Integer id; 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private User user; 

    //getters, setters, constructors ets. 

} 

は、所有インスタンスのエントリにキャッシュされます。

Hibernateは、脱キャッシュされたエンティティをに格納しますはデータベース表現に似ています。外部キー の値の他に、@ManyToOneまたは@OneToOneの子側の の関連付けの列値は、キャッシュに格納されません。

したがって、所有インスタンスがL2キャッシュからアセンブルされている場合、関連付けられたエンティティはそのIDによってロードされる必要があります。これを回避するには、関連付けられているエンティティ(あなたの場合はDetails)もキャッシュ可能にしてください。

詳細はherehereです。

関連する問題