Java 休眠二级缓存不';I don’我不在OneToOne协会工作
我试图启用Hibernate的二级缓存,但无法避免对OneTONE关系发出多个查询 我的模型是:Java 休眠二级缓存不';I don’我不在OneToOne协会工作,java,hibernate,caching,hibernate-cache,Java,Hibernate,Caching,Hibernate Cache,我试图启用Hibernate的二级缓存,但无法避免对OneTONE关系发出多个查询 我的模型是: @Entity @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Business { @OneToOne(mappedBy = "business", cascade = {CascadeType.REMOVE}, fetch = FetchType.EAGER) private Address ad
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Business {
@OneToOne(mappedBy = "business", cascade = {CascadeType.REMOVE}, fetch = FetchType.EAGER)
private Address address;
}
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Address {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "business_id", unique = true, nullable = false, foreignKey = @ForeignKey(name = "fk_business_id"))
private Business business;
}
当我在缓存中使用id为的Business
运行session.get(Business.class,id)
时,不会对加载Business
发出查询,但会对地址发出查询
我知道Address是关系所有者,在Business cache条目中没有地址.id
信息,但是应用与*ToMany relations相同的机制,为每个字段创建一个新的缓存区域,不可能解决这个问题吗?假设业务1与地址2相关,则在第一次加载后,我的缓存中将有以下区域和条目:
Business
Business#1 -> [business model]
Business.address
Business.address#1 -> [2]
Address
Address#2 -> [address model]
我试图通过使用@NaturalId
注释地址.业务
,以及使用@NaturalIdCache
注释地址
类来实现它。缓存区域已创建并填充,但session.get(Business.class,id)
不使用它
我的Business
模型有更多的一对一关系,其外键在另一端(而不是业务),我们必须一次列出几个关系,因此数据库服务器必须在每个HTTP请求中处理几十个查询
我已经阅读了Hibernate的用户指南、Vlad Mihalcea关于2LC及其内存脱水格式的解释、Baeldung的解释和其他几个StackOverflow答案,但找不到解决此问题的方法。这方面有更新吗?