停止java代码执行,直到mysql查询在Java中完成?

时间:2014-05-26 19:22:14

标签: java rest criteria-api jsf-2.2 eclipse-kepler

我正在开发一个使用REST服务(Jersey实现)的项目,用于登录,注册等功能。

在登录时,我想将当前用户详细信息存储在数据库中,并且使用下面的代码成功完成: -

Userlogin userlogin = new Userlogin(user,loginDateTime,null,ipAddress,tokenEnc,salt);
userloginBean.persist(userlogin);
userLoginId = userlogin.getId();
logger.log(Level.INFO, "userLoginId: "+userLoginId);

现在看一下代码的第三行,我试图从userlogin对象中获取最近插入的id。但它让我无效。在第4行,当我尝试在日志中打印它时显示为null。

我放了一些日志来检查执行情况,我发现实际的mysql查询是在第4行之后执行的。

那么请告诉我如何确定mysql已经完成了查询?

如果可能的话,还要解释一下,为什么它表现得像这样,因为我使用相同类型的代码,我从来没有遇到过这样的情况。

我正在使用eclipse Kepler,Jsf 2.2
我的项目是动态网络项目而不是maven 对于mysql查询执行,我在DAO类中使用Criteria API。 我使用JPA持久化数据库。

这是我的UserloginBean.java类的持久化方法:

public void persist(Userlogin transientInstance) {
    log.log(Level.INFO, "persisting Userlogin instance");
    try {
        entityManager.persist(transientInstance);
        log.log(Level.INFO, "persist successful");
    } catch (RuntimeException re) {
        log.log(Level.INFO, "persist failed", re);
        throw re;
    }
}

这是我的日食日志的一部分:

2014-05-27T00:26:17.737+0530|INFO: persisting Userlogin instance
2014-05-27T00:26:17.813+0530|INFO: persist successful
2014-05-27T00:26:17.814+0530|INFO: userLoginId: null
2014-05-27T00:26:17.830+0530|FINE: INSERT INTO userlogin (help, ipaddress, 
login, logout, token, user_id) VALUES (?, ?, ?, ?, ?, ?)
    bind => [6 parameters bound]
2014-05-27T00:26:17.842+0530|FINE: SELECT LAST_INSERT_ID()

提前致谢。 对不起我的英语错误,如果我做了。

1 个答案:

答案 0 :(得分:1)

如果您正在使用JPA,则需要在entityManager上调用flush以查看来自数据库的字段值。例如生成id,使用默认值的列等等......