我想在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();
}
答案 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