Hibernate / JPA缓存查找值

时间:2018-04-10 16:24:19

标签: java hibernate jpa caching

我们有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();

1 个答案:

答案 0 :(得分:0)

获取类型与此无关。 Hibernate的二级缓存行为是缓存一对一关联目标的ID而不是目标本身。

为什么不让自己StateEntity @Cacheable?这似乎是一个非常好的候选人,因为StateEntity的实例应该少于AddressEntity