Play Framework 1.x中模型ID的随机8位数值

时间:2013-12-09 19:26:26

标签: java random playframework playframework-2.0

我想在model而不是play! 1.2.5值中使用auto_increment的随机8位数字ID,而不是创建random value,我自己将其分配给id 。我不知道这是不可能的。我真的用Google搜索了但我找不到任何东西。

以下答案。 这是我在项目中需要的东西。假设我有一个有2个attr的用户对象。名和姓。在创建此对象的defult时,JPA为此对象的id赋予auto_inc值。

@Entity
public class User extends Model{
    public String name;
    public String surname;
}

这里我的控制器中有createUser方法。

public static void createUser(String name, String surname){
     User user = new User();
     user.name = name;
     user.surname = surname;
     /* it seems to me that the answer below can be a solution for what i want like that
      * user.id = javaGenereted8digitNumId();
      * But I dont want this. I want it is handled in model class
      * and I guess it can be with JPA GenericModel. am I right?
      */

     user.save();

}

1 个答案:

答案 0 :(得分:1)

使用:

int ID = (int) (Math.Random()*(99999999-a)+a); //a being the smallest value for the ID

如果您想在左侧包含0,请使用:

import java.text.DecimalFormat;

并在您的代码中:

DecimalFormat fmt = new DecimalFormat("00000000");
int ID = Integer.parseInt(fmt.format((int) (Math.Random()*(99999999-a)+a)));

编辑: 这是您对问题更新的更新。

如果您希望User的模型类每次都创建自己唯一的8位数ID,我建议您创建一个静态变量,为所有创建的用户对象保存最后一个当前使用的ID。这样在创建新用户时,它只会创建一个具有下一个可用ID的新用户,这当然将限制为99999999 ID。 如果你想更进一步,你需要创建一个非常大的静态字符串,其中包含所有使用的空格分隔的ID,并且每次要添加用户时,它都会通过使用来检查ID的可用性.contains(" ID")方法

以下是我认为您的用户类看起来应该是什么的示例:

public class User extends Model
{
    public String name, surname;
    public int ID;
    public static int lastID;
    public static String usedIDs;

    public User(String name, String surname) //regular User objects
    {
        this.name = name;
        this.surname = surname;
        ID = ++lastID;
        usedID's += ID + " ";
    }

    public User(String name, String surname, int n) //first User object created
    {
        this.name = name;
        this.surname = surname;
        ID = 1;
        lastID = 1;
        usedID's = ID + " ";
    }

//rest of your methods