休眠不缓存我的一对一关系在反向侧

2022-09-03 16:14:01

我有这样的代码:

@Entity
@Table(name = "A")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class A
{
  @OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER, mappedBy="a")
  public B getB() {};
}

@Entity
@Table(name = "B")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class B
{
  @OneToOne(cascade={}, fetch=FetchType.LAZY)
  @JoinColumn(name="A_ID")
  public A getA() {};
}

每次加载时都有查询 。为什么在加载后不缓存,是否可以缓存它?ABA.getB()A


答案 1

对我有用的解决方法是使用@OneToMany创建其他方法

@OneToMany(cascade={}, fetch=FetchType.EAGER, mappedBy="a")
public Set<B> getBSet() {};

@Transient
public B getB() { return b.iterator().next(); }

我对这个解决方案不是很满意,但它有效,我找不到其他方法。


答案 2

尝试在 getB() getter 上也放置@Cache注释。我的观察是,如果缓存对象,则可能不会将其视为缓存的关联。