J'ai essayé de reproduire ce comportement, je l'aide à l'aide Grails 1.3.7 et trouvé reproductible
class Child {
String name
static constraints = { name(unique:true) }
}
table created
CREATE TABLE `child` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
requêtes ont tiré sur child.save()
Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.created_by as created3_0_0_, this_.date_created as date4_0_0_, this_.last_updated as last5_0_0_, this_.name as name0_0_, this_.updated_by as updated7_0_0_ from child this_ where this_.name=?
Hibernate: insert into child (version, created_by, date_created, last_updated, name, updated_by) values (?, ?, ?, ?, ?, ?)
La raison pour laquelle je pense que je hiverne les feux de la requête ci-dessus est de vérifier la contrainte unique, et si vous essayez d'effectuer une mise à jour alors cette requête aboutira à avoir un autre objet avec le même identifiant en mémoire, ce qui pourrait conduire à une nonuniqueobjectexception. Je pense que c'est hibernate et pas grails, je n'ai pas vérifié cela en java/hibernate.
Merci
Je pensais tout autant, si vous regardez les commentaires sur le lien donné, vous verrez que quand j'avais la contrainte unique .. Mise en veille prolongée a été une requête sur des tirs session.save (entité), qu'il n'a pas tiré quand j'ai enlevé la contrainte, des pensées sur cela? – Sudarshan
J'ai essayé de recréer ce comportement localement, mais je n'ai pas eu de chance, désolé :(Même avec une contrainte unique, il fait une insertion droite (pour les nouvelles entités) ou une mise à jour (quand ... mise à jour) – wmacura