Привет, как я могу заставить EJB не очищать все после каждой команды, я хочу сделать транзакцию.
Прежде всего, вы не должны получать flush
после «каждой отдельной команды» , и я действительно удивлен, что вы получаете flush
после persist
. Вы показываете весь код? Во-вторых, методы EJB обрабатываются по умолчанию. Но транзакция и flush
на самом деле не связаны (единственная ссылка заключается в том, что flush
будет выполнено до commit
). Во всяком случае ...
Если вы хотите контролировать способ выполнения вызова flush()
, вы можете изменить режим сброса по умолчанию, используя EntityManager#setFlushMode()
. Режимы сброса следующие:
COMMIT
- Сброс происходит только при фиксации транзакции или при вызове flush ().
AUTO
- (по умолчанию) Сброс происходит перед выполнением любого запроса.
Так что-то подобное должно работать:
@Stateless
public class SomeBean {
...
public void doSomeStuffAndThenFlushToTheDb(){
em.setFlushMode(COMMIT);
em.persist(entity);
em.persist(somethingElse);
em.flush(); // Causes flush
}
...
}
Но, как я уже сказал, я удивлен вашим примером. Поведение, которое вы описываете, не то, что я ожидал.