J'ai une question assez simple sur les classes de domaine de gravier. Je ne suis pas sûr de savoir comment l'exprimer correctement puisque je n'arrive pas à trouver la réponse sur google.grails domaine class expose id pour les classes Java
J'ai une classe groovy de domaine
class DomainObject {
String name
String email
}
et une classe java qui utilise cet objet de domaine.
public class DomainUser {
public void method() {
DomainObject object = new DomainObject();
object.getId();
}
}
mais je reçois une erreur sur la ligne
object.getId();
avec le message :
La méthode getId()
est définie pour le type
Comment exposer l'id à la classe java car il est généré automatiquement par les grails cation/hibernation?
Qu'est-ce qui vous donne l'erreur? 'grails compile' ou votre IDE? Il y a beaucoup de choses semi-magiques ajoutées aux classes artefacts Grails par les transformations AST au moment de la compilation (dont getId() 'pour les classes de domaine), et si votre IDE n'est pas conscient de ces transformations, il échouera. –
En outre, un commentaire de côté, Grails remplace les constructeurs de classe de domaine par le biais du mécanisme de métaclasse pour rendre les choses comme autowiring de services dans les domaines fonctionnent correctement. Donc, si vous voulez "nouveau" une classe de domaine en code Java, vous devez utiliser 'InvokerHelper.invokeNoArgumentsConstructorOf (DomainClass.class)' qui est la manière Java d'appeler le constructeur fourni par la métaclasse plutôt que le vrai. –