调用循环函数时Java唯一代码生成失败

调用循环函数时Java唯一代码生成失败,java,hibernate,logic,unique-key,Java,Hibernate,Logic,Unique Key,我们必须实现一个逻辑来用Java编写独特的代码生成。概念是当我们生成代码时,系统将检查代码是否已经生成。如果已生成系统,请创建新代码并再次检查。但这种逻辑在某些情况下失败了,我们无法确定问题是什么 下面是创建唯一代码的代码 整数代码=空 try { int max = 999999; int min = 100000; code = (int) Math.round(Math.random() * (max - min + 1) + min); PreOrders

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

下面是创建唯一代码的代码

整数代码=空

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

请指导我们确定问题

在createCode方法中,当数据库中已经存在生成的随机代码时,尝试再次调用createCode。但是,递归调用的返回值不会更新为代码变量,因此仍然会返回冲突代码并导致错误

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

...
    if (preObj != null) {
        //createCode();
        code = createCode();
    }  
...
以更新代码。
顺便说一下,使用随机数生成唯一值并通过查询测试唯一性有点奇怪。如果需要唯一值,您可以尝试。

因此,在某些情况下,此逻辑发生的情况会失败,我们无法确定问题所在,是否存在异常?例如,代码122334代码已经存在于数据库中,在某些情况下,即使此代码已经存在,系统也会将此代码发回。我们无法确定在何种情况下允许此代码返回数据库中已存在的相同代码。但我们正在对createCode函数本身再次初始化代码,此处代码=int Math.roundMath.random*max-min+1+min;但是代码不会返回给调用方。请注意,代码是局部变量,每个调用都有不同的代码。
...
    if (preObj != null) {
        //createCode();
        code = createCode();
    }  
...