я сущность определяется следующим образом:JPA EntityManager кэширование
public class Version {
@Id
private Long id;
private String content;
@Transient
private Model model;
//...
}
Из того, что я могу видеть, когда find
операция выполняется на Entity менеджера, он делает SELECT
на основной базе данных только один раз, а затем объект кэшируется в Менеджере сущностей. Однако я вижу, что если я присвою Model
свойству model
, это изменение не будет отражено в кэшированном объекте. Например. если в один звонок, выполняется операция find
, и Model
присваивается, когда я снова делаю find
еще от EJB, model
. Недвижимость null
снова. Разве это изменение не отражается на кэшированном объекте? Возможно, потому что это @Transient
?
Спасибо, но я не вижу, что новый SQL-запрос выдается во втором вызове EJB (уровень ведения журнала установлен в FINEST). Управление транзакциями установлено по умолчанию. Что может быть причиной? – Dario
Является ли EJB1 вызывающим EJB2, или у вас есть клиентский вызов EJB1, а затем клиентский вызов EJB2? Вы понимаете, что такое транзакции, когда они начинаются и когда они останавливаются? –
Существует только один EJB, который вызывается через веб-службу. Один и тот же метод выполняет два последовательных вызова веб-службы. В первом вызове я вижу запросы SELECT в журналах. Во втором вызове никаких запросов нет. – Dario