2011-07-05 2 views
2

je dois lier les paramètres de requête à une instance de la classe Java suivante (accesseurs omis):données Grails liaison

public class ShippingHouse { 

    private String name; 
    private String description; 
    private List<ShippingRule> shippingRules = new ArrayList<ShippingRule>(); 
} 

public class ShippingRule { 

    private ShippingHouse shippingHouse; 
    private String name 
} 

avis qu'il ya un 1: N entre ShippingHouse et ShippingRule, mais chaque ShippingRule a également une référence à la ShippingHouse qui le possède.

Si ceux-ci étaient des classes de commande/domaine Grails, je les lie avec les paramètres de demande

name=foo&description=bar&shippingRules[0].name=sr0&shippingRules[1].name=sr1 

Mais il ne semble pas que cela va définir la référence à la possession ShippingHouse dans chaque ShippingRule. Y a-t-il un moyen de lier ceci automatiquement, ou dois-je écrire le code moi-même?

Répondre

-1

Si vous souhaitez implémenter 1: relation N entre les deux classes, vous devez utiliser la bonne approche de Grails. Quelque chose comme ceci:

class ShippingHouse { 
    String name 
    String description 
    static hasMany = [shippingRules: ShippingRule] 
} 

class ShippingRule { 
    String name 
    static belongsTo = [shippingHouse: ShippingHouse] 
} 

S'il vous plaît noter que des points-virgules sont inutiles et la déclaration « privée » sur les champs de classe est implicite.

+0

Je ne peux pas utiliser le concept GORM comme 'hasMany' et' belongsTo' car les classes sont des classes Java –

0

Don,

Vous aurez besoin d'écrire du code pour le faire vous-même en utilisant BindUsing ou d'une autre approche. Le classeur ne suppose pas (et ne devrait pas) supposer quoi que ce soit au sujet des références arrières d'un parent à un enfant. S'il s'agissait d'entités GORM et que la relation était explicite, cela est différent, mais dans votre cas, le classeur ne doit pas supposer que la propriété shippingHouse de la classe ShippingRule a quelque chose à voir avec la propriété shippingRules de la classe ShippingHouse.

Notez également que lucke84 a déclaré que votre "private" est implicite. Assurez-vous de comprendre ce que cela signifie si vous allez les supprimer. Si vous les supprimez, le compilateur va générer des méthodes getter et setter publiques pour ces propriétés, qui peuvent être ou ne pas être ce que vous voulez.

Questions connexes