Вот что я получаю:Почему параметр не сохраняется в параметре вывода?
public User register(User u) {
em.persist(u);
System.out.println("USER id: " + u.getIduser()); // INFO: USER id: 0
em.flush();
System.out.println("USER id: " + u.getIduser()); // INFO: USER id: 1
return u;
}
Даже если опустить вызов flush()
хотя пользователь это сохраняется в БД (MySQL, я использую glasssfish 4 из затмения). Так почему мне нужно вызвать flush, чтобы установить id (он автоматически вызывается, по-видимому, на выходе метода, но говорят, что я хотел использовать идентификатор, находясь в register()
)?
Как в стороне, вызывает ли факт, что флеш() указывает на транзакцию?
Update: вот класс EJB:
@Stateless
public class UserService {
@PersistenceContext
private EntityManager em;
public User register(User u) {
em.persist(u);
// em.flush(); // not needed - called on exit - maybe I have a
// transaction after all
return u;
}
}
UserService вызывается из открытого сервиса UserController @ManagedBean @ViewScoped {@EJB private UserService; } '. Я думаю, наконец, что ответ на титульный вопрос заключается в том, что persist() должен быть асинхронным. –