2011-11-08 19 views
6

Soy nuevo en Grails. Tengo un campo en mi objeto de dominio que defino como String.Campos de AutoIncrement distintos de Id in grails

String ponum 

Cuando hago clic primera vez en la creación de la página, el campo "ponum" tiene que mostrar 0001 y más tarde tiene que guardar en database.And Cuando hago clic en el segundo tiempo el campo "ponum" tiene que mostrar 0002 y luego tiene que guardarse en la base de datos. Cada vez que hago clic en crear página, el campo "ponum" tiene que autoincrementarse y guardarlo en la base de datos. Yo en google, pero no recibí ningún documento. gracias

+1

El campo de versión (que se añade automáticamente por griales) también le indica cuántas veces la fila se ha actualizado. Grails lo incrementa automáticamente cada vez que se actualiza la fila, por lo que si eso es todo lo que está buscando, podría funcionar para usted. – Todd

Respuesta

6

Como las cosas se ponen un id de todos modos (suponiendo que el uso de un RDBMS regulares con genaerator Identificación del estándar), ¿por qué no solo pretender que hay una variable ponum que se basa en la identificación?

Sólo tiene que añadir un captador a su clase de dominio:

class Page { 
    String getPonum() { 
    String.format("%04d", id) 
    } 
} 
+0

Gracias por responder, funciona para mí. Pero cuando hago clic en crear página, aparece "nulo". En lugar de mostrar un nuevo ponum en la página de creación. –

+0

@SathishKumar Ahhh ... la identificación no se crea hasta que se guarda por primera vez ... Se podría cambiar a: 'id? String.format ("% 04d", id): "No guardado" para mostrarle algo al usuario antes de que se guarde, o utilice algo así como una "secuencia" si su (la base de datos los admite). Sin embargo, esto significaría que al hacer clic en "crear página" se crearían muchos nuevos 'ponum' que nunca llegarían a la base de datos. –

1

Según this answer, no es posible utilizar generadores de hibernación (aquellos utilizados para IDS) para hacer eso. Si realmente necesita utilizar generadores Hibernate, también se describe una solución en la respuesta.

En su caso, se puede utilizar un interceptor al generador de su propiedad ponum al insertar un nuevo objeto:

class Yours { 
    int ponum 

    def beforeInsert() { 
    def lastPonum = Book.list([sort: 'ponum', order:'desc', max: 1]) 
    if(lastPonum) 
     ponum = (lastPonum.pop().ponum as int) + 1 as String 
    else 
     ponum = '0' 
    } 
} 
+3

Esta respuesta no es segura para subprocesos. Si tiene dos hilos haciendo un inserto al mismo tiempo, ambos obtendrán el mismo ponum. – mmigdol

Cuestiones relacionadas