В режиме FlushModeType.AUTO контекст живучесть синхронизируется с базой данных в следующих случаях:JPA FlushModeType COMMIT
before each SELECT operation
at the end of a transaction
after a flush or close operation on the persistence context
В режиме FlushModeType.COMMIT, означает, что он не должен смывать контекст сохранения перед выполнением запроса, потому что вы указали, что в памяти нет данных, которые повлияли бы на результаты запроса к базе данных.
я привел пример в JBoss, как 6,0:
@Stateless
public class SessionBeanTwoA implements SessionBeanTwoALocal {
@PersistenceContext(unitName = "entity_manager_trans_unit")
protected EntityManager em;
@EJB
private SessionBeanTwoBLocal repo;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void findPersonByEmail(String email) {
1. List<Person> persons = repo.retrievePersonByEmail(email);
2. Person person = persons.get(0);
3. System.out.println(person.getAge());
4. person.setAge(2);
5. persons = repo.retrievePersonByEmail(email);
6. person=persons.get(0);
7. System.out.println(person.getAge());
}
}
@Stateless
public class SessionBeanTwoB extends GenericCrud implements SessionBeanTwoBLocal {
@Override
public List<Person> retrievePersonByEmail(String email) {
Query query = em.createNamedQuery("Person.findAllPersonByEmail");
query.setFlushMode(FlushModeType.COMMIT);
query.setParameter("email", email);
List<Person> persons;
persons = query.getResultList();
return persons;
}
}
FlushModeType.COMMIT не похоже на работу. В строке 1. возраст человека берется из базы данных и печатает 35 в строке 3. В строке 4, человек обновляется в постоянной связи, но в строке 7. возраст человека равен 2.
JPA 2.0 Спецификация говорит:
Type.COMMIT установлен, эффект обновления сделанные для сущностей в контексте персистентности по запросам, - не указано.
Но во многих книгах они объясняют, что я написал в начале этого сообщения.
Итак, что же делает FlushModeType COMMIT?
Tks заранее за вашу помощь.