Не путайте промывку с фиксацией.Во время flush()
поставщик JPA физически отправляет сгенерированный SQL в базу данных и, в вашем случае, читает сгенерированный идентификатор и заполняет его в компоненте. Обратите внимание, что вы всегда должны использовать возвращенную сущность, а не исходную, переданную persist()
:
token = em.persist(token);
С другой стороны, фиксация выполняет базу данныхсовершить.Очевидно, сначала это вызовет flush()
, но здесь вам это не поможет.Но так как вы спрашиваете - каждый метод в EJB является транзакционным по умолчанию.Это означает, что транзакция фиксируется, когда вы оставляете первый EJB в стеке: если вы вызываете один EJB из другого, вызываемый объект присоединяется к транзакции вызывающего по умолчанию (см .: Поведение распространения транзакции ).
Также обратите внимание, что правила для flush()
немного сложны, так как каждый провайдер пытается сделать это как можно позже и партиями.