gpt4 book ai didi

java - 在 Java 中完成 mysql 查询之前停止执行 Java 代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:04:19 26 4
gpt4 key购买 nike

我正在开发一个使用 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 行,当我尝试在日志中打印它时,它显示为空。

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

所以请告诉我如何确定 mysql 已完成其查询?

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

我正在使用 eclipse Kepler,Jsf 2.2
我的项目是 Dynamic web project 而不是 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;
}
}

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

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()

提前致谢。如果我有任何错误,请原谅我的英语错误。

最佳答案

如果您使用的是 JPA,则需要对 entityManager 调用 flush 以查看来自数据库的字段值。例如生成的 ID、具有默认值的列等...

关于java - 在 Java 中完成 mysql 查询之前停止执行 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com