我们有JPA实体代表查找值(状态,国家/地区代码等)。经常调用以获取这些值的List
的方法将在适当的时候使用org.springframework.cache.annotation.Cacheable
注释进行缓存。
我们还有与这些查找实体有关系的实体,如:
@Entity
@Table(name = "Address")
public class AddressEntity {
// ...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STATE_CD", referencedColumnName = "CD")
@NotNull
private StateEntity state;
// ...
}
当我们加载其中一个实体然后在关联的查找上调用getter时,Hibernate再次命中数据库以加载该值。我们想要这样做,当我们有一个地址并且我们在该地址上执行getState
时,我们会在本地缓存中找到该信息。我们怎样才能用Hibernate / JPA做到这一点?
// Get address:
Address address = addressRepo.findOne(addressId);
// Get the state - this causes an additional query to hit the database:
State state = address.getState();
答案 0 :(得分:0)
获取类型与此无关。 Hibernate的二级缓存行为是缓存一对一关联目标的ID而不是目标本身。
为什么不让自己StateEntity
@Cacheable
?这似乎是一个非常好的候选人,因为StateEntity
的实例应该少于AddressEntity