2011-12-27 3 views
0

Je crée une relation hasMany (théoriquement) simple au sein d'une classe de domaine. J'ai deux tables avec une relation de clé étrangère entre les deux. L'objet de domaine Tableau 1 est la suivante:Grails hasMany erreur de création de beans

Functionality{ 
String id 
static hasMany = [functionalityControllers:FunctionalityController] 
static mapping = 
{ 
    table 'schema.functionality' 
    id column:'FUNCTIONALITY_NAME', type:'string', generator:'assigned' 
    version false 
} 
} 

et objet de domaine 2

FunctionalityController 
{ 
    String id 
    String functionalityName 
    String controllerName 

    static mapping = 
    { 
    table 'schema.functionality_controller' 
    id column:'id', type:'string', generator:'assigned' 
    version:false 
    } 
} 

La question que j'ai est que lorsque j'ai la ligne hasMany à l'intérieur de l'objet de domaine Functionality, l'application gagné » t commencer (à la fois l'application et les tests d'intégration). L'erreur est org.springframework.beans.factory.BeanCreationException menant à Invocation of init method failed; nested exception is java.lang.NullPointerException.

Toute aide serait appréciée. MISE À JOUR: * de travail Domaines *:

class Functionality { 

String id 
static hasMany = [functionalityConts:FunctionalityCont] 
static mapping = 
{ 
    table 'schema.functionality' 
    id column:'FUNCTIONALITY_NAME', type: 'string', generator: 'assigned' 
    functionalityConts(column:'functionality_name') 
    version false; 
} 
} 

et

class FunctionalityCont { 

String id 
String functionalityName 
String controllerName 
static belongsTo = [functionality: Functionality] 
static contraints = { 

} 
static mapping = 
{ 
    table 'schema.functionality_controller' 
    id column:'id', type: 'string', generator: 'assigned' 
    functionality(column:'FUNCTIONALITY_NAME') 
    version false; 
} 
} 

Répondre

3

bien 2 choses ...

1.I'm pas sûr mais je suppose que votre classe de domaine avec le préfixe « contrôleur » est le responsable peut-être, c'est parce que Grails est convention sur la configuration et par convention La classe du contrôleur se termine par le préfixe du contrôleur et se trouve dans le dossier du contrôleur, dans ce cas

2.Dans GORM et dans ce cas la relation entre les objets peut être unidirectionnelle ou bidirectionnelle, est-ce votre décision d'en choisir une? , mais dans les deux cas, il existe des implémentations différentes, la classe Functionality (btw manque le mot 'class') a la bonne relation à FunctionalityController par hasMany, mais Functionali tyController ne connaît pas la relation, de sorte que vous pouvez mettre en œuvre:

// For unidirectional 
static belongsTo = Functionality 
// For bidirectional 
static belongsTo = [functionality:Functionality] 
// Or put an instance of Functionality in your domain class, 
// not common, and you manage the relationship 
Functionality functionality 

Venez donc voir et nous dire pls ... Cordialement

+0

Avant cette réponse que j'avais changé FunctionalityController à FunctionalityCont sans changement . J'ai également essayé les étapes ci-dessus et j'obtiens une erreur différente que je signalerai dans la réponse de Gregg. – Joseph

+0

Pas sûr à 100% si c'est la bonne réponse, car je pensais avoir essayé la même chose hier sans aucune chance. Il semble fonctionner comme prévu maintenant, avec et sans l'appartient à. – Joseph

+0

Un dernier problème que j'ai: Le SQL qui est généré fait référence à une colonne inexistante. Comment puis-je spécifier la colonne/champ à utiliser? – Joseph

3

Essayez d'ajouter

belongsTo statique = [fonctionnalité: Fonctionnalité]

à votre classe FunctionalityController . Je soupçonne qu'il y a plus à votre erreur que ce que vous avez montré, mais généralement un hasMany a besoin d'un côté propriétaire. Puisque c'est là que réside la clé étrangère.

Questions connexes