Кешировние 1-го уровня связано с сессией. Но как такое кеширование может работать если при каждом обращении к DAO слою принято открывать новую сессию?
Пример:
public class DAO {
private final SessionFactory factory;
public User getUser(final String login, final String password) {
try (final Session session = factory.openSession()) {
final List<User> select = session
.createQuery(GET_USER_BY_LOG_PASS.val, User.class)
.setParameter("login", login)
.setParameter("password", password)
.list();
return select.isEmpty() ? new User() : select.get(0);
}
}
}
Если я вызову метод getUser два раза с одинаковыми параметрами на одном объекте DAO то очевидно будет создано 2 разные сессии.
DAO dao = new DAO();
dao.getUser("test", "test");
dao.getUser("test", "test");
Озночает ли это что кэши 1-го уровня этих сессий будут согласованы или нет, вместе с закрытием сессии все данные кеша становятся мусором?