2011-04-11 2 views
4

Il existe de nombreuses questions similaires, mais je n'ai pas trouvé exactement comment utiliser un modèle POJO dans une application grails. Considérez Java Bean suivant:Utilisation de Java beans comme classes de domaine Grails

package com.example.java; 

public class UserBean { 

    String name; 
    String surname; 
    Integer age; 

    //--- assume setters and getters here 
} 

et une classe de domaine de Grails:

package com.example.grails 

class User extends com.example.java.UserBean { 

    static constraints = { 
     name(blank:false) 
     surname() 
     age() 
    } 
} 

et un contrôleur compagnon avec échafaudage = true. Je ne suis pas sûr que cela soit supposé fonctionner mais je n'ai rien vu suggérer autrement. Cela compile et fonctionne bien, jusqu'à ce que j'essaie d'ajouter un nouvel utilisateur à partir de la vue générée. Puis-je obtenir

org.hibernate.MappingException: Unknown entity: com.example.grails.User 

Des idées?

+0

Je ne pense pas que ce soit possible. Pourquoi étendriez-vous un POJO de toute façon? Groovy génère automatiquement des getters et setters pour vous ... il suffit de copier/coller les variables membres dans la classe de domaine et appelez-le bien. – Blacktiger

+0

Si vous avez déjà votre modèle de domaine écrit en Java, comment pourriez-vous écrire une application Grails? –

+0

Si votre modèle de domaine est écrit en Java en utilisant Hibernate, vous pouvez utiliser vos mappages Hibernate dans Grails pour vous permettre d'utiliser vos POJO. Je ne suis pas familier avec la façon de le faire cependant. Consultez la section "Grails and Hibernate" du guide de l'utilisateur pour plus de détails. – Blacktiger

Répondre

2

Je trouve la réponse à ce problème sur: this spring.io blog post

Si vos classes de domaine Java sont mises en veille prolongée, vous ne les étendez pas dans Grails. Tout ce que vous avez à faire est de définir les contraintes dans un fichier séparé nommé UserBeanConstraints.groovy:

constraints = { 
    name(blank:false) 
    surname() 
    age() 
} 
+0

Je ne connais pas la tradition ici pour accepter ses propres questions. Je suppose que j'accepterai ceci s'il obtient des votes. –

+0

Je pense que vous vouliez les contraintes tout le temps au lieu de sous-classer; Je voudrais juste clarifier votre réponse et ce que vous essayiez d'accomplir et ensuite l'accepter. – tmarthal

3

À quoi ressemble votre hibernate.cfg.xml?

Assurez-vous que votre classe com.example.grails.User est mise en correspondance:

<hibernate-configuration> 
    <session-factory> 
    <mapping package="com.example.grails" /> 
    <mapping class="com.example.grails.User" /> 
    </session-factory> 
</hibernate-configurations> 

Vous trouverez plus de détails: http://grails.org/doc/1.0.x/guide/15.%20Grails%20and%20Hibernate.html

Questions connexes