【发布时间】:2013-11-21 09:01:51
【问题描述】:
用户映射
@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 事务方法返回时,知道事务已提交,用户 id 仍然为空?
我有来自 eclipse 链接的查询日志,并显示用户已插入并且 id 也已分配,但似乎尚未在代码中刷新。
我尝试过从会话或直接刷新并获取对象用户但不起作用。
谢谢!
【问题讨论】:
-
你能把
repository.saveUser()方法的内容贴出来好吗?user实例可能已分离。 -
这是一个使用实体管理器的简单“合并”。
标签: java jpa eclipselink entitymanager