2013-12-09 2 views
0

Я хотел бы использовать случайный 8-значный идентификационный номер для model в play! 1.2.5 вместо auto_increment стоимости, а также без создания random value, присвоив его идентификатор самого. Я не знаю, возможно это или нет. Я действительно искал ее, но ничего не нашел.Случайного значения 8 цифр для модели идентификатора в Play Framework 1.x

для ответа ниже. Вот что мне нужно в моем проекте. Предположим, что у меня есть объект пользователя, который имеет 2 attr. имя и фамилия. С целью создания этого объекта JPA оценивает значение 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

использование:

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

EDIT : Это обновление для вашего u pdate вопроса.

Если вы хотите, чтобы класс модели User создавал свой собственный уникальный идентификатор 8digit каждый раз, я предлагаю вам создать статическую переменную, которая сохраняет последний используемый в настоящее время ID для всех созданных объектов пользователя. Таким образом, при создании нового пользователя он просто создаст нового пользователя со следующим доступным идентификатором, это, конечно, будет ограничено идентификаторами 99999999. Если вы хотите пойти дальше, тогда вам нужно будет создать очень большую статическую String, содержащую все используемые идентификаторы, разделенные пробелами, и каждый раз, когда вы хотите добавить пользователя, он проверяет наличие идентификатора с помощью .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 
+0

спасибо за ваш ответ. что такое? это идентификатор сохраненного объекта? – gabby

+0

a - ваш начальный идентификационный номер. Если вы хотите, чтобы ID начинался с 0, тогда a = 0, если вы хотите, чтобы идентификаторы начинались с 10000000, например, просто измените значение a. – ThaBomb

+0

, а затем я должен установить этот общий идентификатор на идентификатор модели каждый раз перед сохранением объекта модели? – gabby

Смежные вопросы