Java JPA事务提交Eclipselink后的Id null
用户映射Java JPA事务提交Eclipselink后的Id null,java,jpa,eclipselink,entitymanager,Java,Jpa,Eclipselink,Entitymanager,用户映射 @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 = "idUsuar
@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;
链接两个实体的代码
@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
.
public Message registerUser(final Message messageIn)抛出播放gurue异常
{
.
.
.
最终会话=createSession(messageIn);
.
//这里的用户Id仍然为空
.
有了这个上下文,为什么当我从createSession事务方法返回时,知道事务已经提交,用户id仍然为null
我有来自eclipse链接的查询日志,并向我显示用户已插入,id也已分配,但代码中似乎尚未刷新
我已经尝试过刷新并从会话或直接获取对象用户,但不起作用
谢谢!entityManager.merge()(请参阅)方法返回一个托管实例。在我看来,作为参数发送的
用户
实例没有被附加。换句话说,它不是您所说的“out”参数,因此您不会在该对象中设置ID。您需要使用返回的对象才能找到生成的ID
会话
实例肯定没有被管理。而且其引用的用户
也不是被管理的实例。你能发布存储库的内容吗。saveUser()
方法?可能会出现用户
实例被分离的情况。这是一个使用实体管理器的简单“合并”。好的。我会尝试你的方法并告诉你消息。谢谢!它工作得很好。我不会再忘记这个概念XD谢谢!
public Message<ResultDTO> registerUser(final Message<NewUserDataDTO> messageIn) throws PlayTheGuruException
{
.
.
.
final Session session = createSession(messageIn);
.
//here the user Id is still null
.