tutorial example auth hibernate validation grails spring-security gorm

hibernate - example - ¿Por qué el campo con restricciones únicas falla en la actualización, en Grails?



spring security grails example (1)

Cuando tengo un atributo de identidad personalizado mapeado en una clase de dominio, ¿por qué hibernate verifica una restricción única? Cuando actualizo un objeto, la validación falla a pesar del hecho de que el valor del campo publicado es el mismo que el almacenado en DB. Esto ocurre, incluso si no hago ningún cambio en el formulario (asegurando que esté sucio: falso y sin errores de enlace de propiedad). Tengo una clase de dominio Grails como la siguiente:

class User { Long profileId String email String username String password String title String firstname String lastname String zipCode Date lastLoginDate static constraints = { profileId nullable: true, blank: true email blank: false, unique: true, email: true username blank: false, unique: true password blank: false lastLoginDate nullable: true firstname nullable: true lastname nullable: true zipCode nullable: true } static mapping = { table ''USER_PROFILE'' id name:"profileId", column: "profile_id", generator: "sequence", params: [sequence:''userprofile_sequence''] version false } }

Ahora, cuando creo un usuario con un mínimo conjunto de atributos, se crea un registro. Pero cuando trato de actualizar el mismo objeto como: def user = User.findByUsername (''akeel'') user.lastLoginDate = new Date () user.save (flush: true) No ocurre nada, porque falla la verificación de validación única. Puedo omitir la validación haciendo user.save (validate: false, flush: true) Pero no es una opción, ya que necesito validar el zipCode, siempre que un usuario lo agregue.

Tuve que establecer la restricción para la columna de identidad personalizada, profileId, como valor nulable verdadero, para resolver el problema de "columna repetida en la asignación" tal como se propuso aquí .

Esta pregunta es exactamente como la que se discute aquí , pero las soluciones propuestas no me funcionaron.

Estoy usando Grails 2.1.2, avíseme si se requiere algo más para comprender el problema.


Parece que un nombre de propiedad personalizado para la clave principal no funciona en Grails. profileId con Grails 2.0.4, 2.2.4 y 2.3.4 y todos no reconocen profileId como clave principal. User.get(1) funciona bien, pero user.ident() devuelve null . Ciertamente plantearía un problema en el Grails JIRA.

La solución más simple es eliminar la propiedad profileId y simplemente usar la id integrada. Luego simplemente elimine el name: valor de la asignación personalizada. En otras palabras, debes terminar con

id column: "profile_id", generator: "sequence", params: [sequence:''userprofile_sequence'']