2013-11-21 2 views
0

USER MAPPINGId нуля после JPA транзакции EclipseLink

@Id 
@Basic(optional = false) 
@SequenceGenerator(name = "sec_t_usuario", allocationSize = 1) 
@GeneratedValue(generator = "sec_t_usuario", strategy = GenerationType.SEQUENCE) 
@Column(name = "id") 
private Integer id; 

@OneToMany(mappedBy = "idUsuario", cascade = {CascadeType.ALL}) 
private Set<Session> sessions; 

сеансу

@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }) 
@JoinColumn(name = "id_usuario", referencedColumnName = "id", nullable = false) 
private User user; 

КОД связывающих два ПРИМИТИВОВ

@Transactional(propagation=Propagation.REQUIRES_NEW, rollbackFor=PlayTheGuruException.class) 
private Session createSession(final User user) throws PlayTheGuruException 
{ 
    final Session session = new Session(); 

    session.setActive(true); 
    session.setLastLogin(Calendar.getInstance()); 
    session.setUser(user); 

    user.addSession(session); 

    entityManager.merge(user); 

    return session; 
} 

Основного метода

public Message<ResultDTO> registerUser(final Message<NewUserDataDTO> messageIn) throws PlayTheGuruException 
{ 
    . 
    . 
    . 
    final Session session = createSession(messageIn); 
    . 
    //here the user Id is still null 
    . 

Имея этот контекст, почему, когда я возвращаюсь из транзакционного метода createSession, идентификатор пользователя по-прежнему является нулевым, зная, что транзакция была совершена?

У меня есть журнал запросов из ссылок eclipse и покажу мне, что пользователь вставлен и идентификатор тоже назначен, но, похоже, не был обновлен в коде.

Я попытался выполнить флеш и получить объектного пользователя от сеанса или напрямую и не работает.

Спасибо!

+1

Можете ли вы разместить содержимое метода 'repository.saveUser()', пожалуйста? Может случиться, что экземпляр 'user' отсоединен. –

+0

это простое «слияние» с использованием диспетчера сущностей. –

ответ

1

Метод entityManager.merge() (см. here) возвращает управляемый экземпляр. Мне кажется, что экземпляр user, отправленный как параметр, не подключен. Другими словами, это не то, что вы бы назвали параметром «out», так что вы выиграли, у вас есть идентификатор, установленный в этом объекте. Вам нужно использовать возвращенный объект, чтобы найти сгенерированный идентификатор.

Экзамен session определенно не управляется. А также его ссылка User не является управляемым экземпляром.

+0

ОК. Я попробую ваш подход и расскажу вам новости. Благодаря! –

+0

Работает отлично. Я больше не забуду эту концепцию XD Спасибо! –

Смежные вопросы