J'essaie de créer des objets de domaine à partir de xml.Grails: liaison de données
class A {
String name
}
class B {
A a
int something
}
J'ai d'abord créé une instance de A, et vidée. lors de la création de B, commencez par mapper les attributs disponibles.
def b = new B(xml.attributes())
ce serait la carte « quelque chose » correctement, mais pas le type d'objet A. Donc, je récupérer l'instance de A et ajouter comme
b.a = A.findByA("id of a")
Je pouvais voir l'objet b est construit (à la fois champs remplis) dans le débogueur, mais il ne persiste pas sur save (flush: true).
- Quel est le problème dans le assignemt ci-dessus, ou doit utiliser l'ID au lieu (b.a.id = ..)
- Comment puis-je voir ce qui va mal dans le fichier journal? quelle trace doit être activée. J'ENABLED là dans le fichier de configuration
trace 'org.hibernate.SQL', 'org.hibernate.type'
(qui donne la trace SQL pour insérer, sélectionnez etc. Mais pas pour le scénario ci-dessus, peut-être parce qu'il ne parvient pas mise en veille prolongée).
Tout pointeur, très apprécié .. merci.
+1 pour votre suggestion. failOnError affiche une erreur de validation. IllegalStateException: Impossible de convertir la valeur de type [java.lang.String] en type requis [com.bsr.test.A] pour la propriété 'A': aucun éditeur correspondant ou stratégie de conversion trouvée] Je ne comprends pas pourquoi traiter l'objet comme une chaîne, comme je l'ai expliqué, dans mon IDE, l'objet est rempli correctement après l'affectation. Je regarde BindData ou une autre méthode pour ajouter ce champ complexe. – bsr
Sans voir plus de code de votre application, je ne peux pas aider à diagnostiquer ce problème supplémentaire. Il semble qu'au moment de la validation que la variable est une chaîne, lorsque l'objet est attendu. –