Eclipselink共享缓存-惰性关联

时间:2018-09-28 08:03:39

标签: eclipselink jpa-2.0

我正在使用JPA eclipselink 2.6.4开发应用程序。

我正在为服务器JPA实体启用共享缓存。

@Entity
@Cache(
      type=CacheType.SOFT,
      size=500 
    )
public class Tutor
{
  @Id
  @Column(name = "id")
  private String id;

  @Column(name = "name")
  private String name;

  ... getters and setters
}

@Entity
@Cache(
      type=CacheType.SOFT,
      size=500 
    )
public class Student
{
  @Id
  @Column(name = "id")
  private String id;

  @Column(name = "name")
  private String name;

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="TUTOR_ID")
  private Tutor tutor;

  ... getters and setters
}

我得到了一个典型的辅导老师和学生的实体协会。之所以定义为LAZY,是因为我们希望在完成学生查询后避免出现“ N + 1问题”。

当我们执行学生查询并希望解决关联时,我们使用JOIN FETCH技术:

SELECT s FROM Student s JOIN FETCH s.tutor t WHERE s.id = :id

好的,在这里。

我们第一次执行JPA查询,因为共享缓存还没有学生,所以将执行数据库查询。我们得到的学生实体中填充了导师实体。

尽管如此,第二次我们执行相同的查询时,共享缓存中没有命中,因此不会执行数据库查询。但是,然后学生实体中就没有教师实体了。

我们想让学生实体中包含导师实体。

我们已经看到有可能将关联更改为EAGER,但是我们不想更改为EAGER以免出现“ N + 1问题”。

有什么主意吗?

谢谢

0 个答案:

没有答案