2
私はHibernateの2次キャッシュにEhcacheプロバイダを使用しています。それは@Cache
で注釈を付け一対多のコレクションを、キャッシュしますが、1対1でキャッシュしません:ToOne
団体only the id (foreign key)についてHibernate第2レベルのキャッシュが1対1で動作しない
userRepository.findOne(id);
私はHibernateの2次キャッシュにEhcacheプロバイダを使用しています。それは@Cache
で注釈を付け一対多のコレクションを、キャッシュしますが、1対1でキャッシュしません:ToOne
団体only the id (foreign key)についてHibernate第2レベルのキャッシュが1対1で動作しない
userRepository.findOne(id);
:私は、データをフェッチするために春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
)もキャッシュ可能にしてください。