Voici ce que je voudrais faire:Comment ajouter des contraintes sur les propriétés héritées dans un domaine Grails sous-classe
class A {
String string
static constraints = {
string(maxSize:100)
}
}
class B extends A {
static constraints = {
string(url:true)
}
}
Ainsi la classe A devrait avoir quelques contraintes et B devraient avoir les mêmes plus contraintes supplémentaires sur la même propriété.
Je ne pouvais pas obtenir que cela fonctionne et je peux imaginer qu'il serait incompatible avec le concept de Table par Hiérarchie. J'ai donc essayé de contourner ce problème en introduisant un objet Command avec des contraintes de classe B qui peuvent être validées dans le constructeur de la classe B. Cependant, il semble que les objets Command ne peuvent être utilisés que dans les contrôleurs (les grails ne cessent de dire n'est pas une méthode .validate() pour cela). Donc, ma question est: Quelle est la manière la plus élégante de résoudre cela en utilisant des contraintes de grails (ne pas ré-implémenter la validation manuellement)? Pourrait être ...
- Passage au concept de la table par sous-classe?
- Rendre l'objet de commande fonctionne dans la classe de domaine en quelque sorte?
- Tout autre moyen?
Edit: Ce serait bien pour moi de définir toutes les contraintes dans les classes d'enfants, en répétant les contraintes de la classe mère ou même pas ayant des contraintes dans la classe parente du tout. Mais la solution devrait fonctionner pour plusieurs classes enfants (avec des contraintes différentes) de la même classe parente.
Je ne suis pas sûr que chaque contrainte fonctionne de cette façon, comme par les classes héritées par défaut sont mis en correspondance avec une même table de DB. Donc, si vous avez la classe C avec des contraintes uniques non-nulles sur C.c, il imposera une contrainte de table DB sur toute la table A - et le champ c sera là pour toutes les classes, et sera nul pour autre chose que C instances. –
Oui, c'est pourquoi j'ai mis en scène Table-per-Sub-Class. –