Как получить идентификатор вновь сохраненного объекта до завершения транзакции при использовании аннотации @Transactional .?
Допустим, у меня есть таблица User, идентификатор которой генерируется последовательностью базы данных ..
User.java
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="USERSEQ")
@SequenceGenerator(name="USERSEQ", sequenceName = "USERSEQ")
@Column(name="ID", nullable=false)
private int id;
@Column(name="FIRSTNAME", nullable=false)
private String firstName;
@Column(name="LASTNAME", nullable=false)
private String lastName;
}
Я хочу сделать что-то подобное в классе обслуживания .. сохранить объект пользователя, затем получить идентификатор этого объекта, добавить его в объект аудита изатем сохраните его .. Но проблема в том, что объект пользователя на самом деле не сохраняется, поэтому идентификатор, добавленный в объект аудита, не является действительным идентификатором новой записи пользователя.
UserService.java
@Transactional
public void addUser(User newUser, UserAudit userAudit ){
newUser = userDao.addUser(newUser);
userAudit.setUserId(newUser.getId());
userAuditDao.addUserAudit(userAudit);
}
Я пытался очистить сеанс перед возвратом пользовательского объекта из слоя дао, но, похоже, он не работает ...
UserDao.java
public User addUser(User user){
Session session = sessionFactory.getCurrentSession();
user = (User) session.merge(user);
session.flush();
return user;
}
Так что же делатьМне нужно здесь, чтобы получить идентификатор в слое обслуживания до завершения транзакции?ТИА.