gpt4 book ai didi

调用重复函数时,Java 唯一代码生成失败

转载 作者:行者123 更新时间:2023-11-30 05:30:56 25 4
gpt4 key购买 nike

我们必须实现一个逻辑来用 Java 编写独特的代码生成。这个概念是当我们生成代码时,系统将检查代码是否已经生成。如果已经生成系统,请创建新代码并再次检查。但这种逻辑在某些情况下会失败,我们无法确定问题是什么

这是创建唯一代码的代码

整数代码 = null;

try {
int max = 999999;
int min = 100000;
code = (int) Math.round(Math.random() * (max - min + 1) + min);
PreOrders preObj = null;
preObj = WebServiceDao.getInstance().preOrderObj(code.toString());
if (preObj != null) {
createCode();
}

} catch (Exception e) {
exceptionCaught();
e.printStackTrace();
log.error("Exception in method createCode() - " + e.toString());
}
return code;

}

函数preOrderObj正在调用一个函数来检查数据库中是否存在代码,如果存在则返回对象。我们使用Hibernate来映射数据库功能和后端的Mysql。

这是函数preOrderObj

PreOrders preOrderObj = null;
List<PreOrders> preOrderList = null;
SessionFactory sessionFactory =
(SessionFactory) ServletActionContext.getServletContext().getAttribute(HibernateListener.KEY_NAME);
Session Hibernatesession = sessionFactory.openSession();
try {
Hibernatesession.beginTransaction();
preOrderList = Hibernatesession.createCriteria(PreOrders.class).add(Restrictions.eq("code", code)).list(); // removed .add(Restrictions.eq("status", true))
if (!preOrderList.isEmpty()) {
preOrderObj = (PreOrders) preOrderList.iterator().next();
}
Hibernatesession.getTransaction().commit();
Hibernatesession.flush();
} catch (Exception e) {
Hibernatesession.getTransaction().rollback();
log.debug("This is my debug message.");
log.info("This is my info message.");
log.warn("This is my warn message.");
log.error("This is my error message.");
log.fatal("Fatal error " + e.getStackTrace().toString());
} finally {
Hibernatesession.close();
}
return preOrderObj;
}

请指导我们确定问题。

最佳答案

createCode方法中,当生成的随机码已经存在于数据库中时,您尝试再次调用createCode。然而,递归调用的返回值并没有更新到code变量中,因此冲突的code仍然被返回并导致错误。

要解决该问题,请将方法更新为

...
if (preObj != null) {
//createCode();
code = createCode();
}
...

这样代码就更新了。顺便说一句,使用随机数生成唯一值并通过查询测试唯一性有点奇怪。您可以尝试Auto Increment如果您想要独特的值(value)。

关于调用重复函数时,Java 唯一代码生成失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573278/

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