afaik-объекты индексируются только по их первичному ключу в кеше 2-го уровня, поэтому запросы связанных объектов не будут использовать его:
@Entity
public class Employee {
@Id
@Column(name="EMP_ID")
private long id;
...
@OneToMany(mappedBy="owner")
private List<Phone> phones;
...
}
@Entity
public class Phone {
@Id
private long id;
...
@ManyToOne
@JoinColumn(name="OWNER_ID")
private Employee owner;
...
}
EntityManager em;
// uses 2nd level cache
Employee employee = em.find(Employee.class, 1);
// doesn't use 2nd level cache. Even if 2nd level cache actually
// contains all referenced phones, there will be a DB call.
employee.getPhones();
Можно ли избежать вызова db при доступетелефоны и использовать кэш 2-го уровня?Существует ли реализация кэша, поддерживающая пользовательское индексирование?
В настоящее время я использую wildfly 14 с hibernate / infinispan.
Будет ли доступ к телефонам по крайней мере использовать кэш запросов или просто em.createQuery(...)
?