2011-08-30 4 views
2

J'ai une structure de classe comme suit. Ces classes sont des classes hibernate donc je ne peux pas les changer.Dozer mappage des collections non génériques aux propriétés

//assume all getters & setters are present 
public class Order{ 
    private Customer customer; 
} 

public class Customer{ 
    // non generics set 
    private Set nameParts; 
} 

public class NamePart{ 
    private String id; 
    private String name; 
} 

// target class 
public class OrderShippingDetail{ 
    private String firstName; 
} 

fichier mappying

<mapping> 
    <class-a>Order</class-a> 
    <class-b>OrderShippingDetail</class-b> 
    <field> 
     <a>customer.nameParts[0].name</a> 
     <b>firstName</b> 
    </field> 
</mapping> 

Mais cette mise en correspondance de customer.nameParts [0] .name travail dosent comme le bulldozer dosent savoir l'objet dans l'ensemble. Y a-t-il du travail?

Si cela ne peut être effectué que par un convertisseur personnalisé, un exemple de conseil de modèle de code est apprécié.

+0

si vous essayez de mapper le premier élément dans le jeu nameParts à le prénom? Les ensembles ne sont pas ordonnés donc le premier élément de nameParts ne sera pas toujours le même ... –

+0

ouais je le sais, mais le développeur original l'a laissé avec set qui n'a qu'un seul élément et c'est le nom du client entier (pas seulement une partie). fondamentalement, je veux accéder à un élément présent dans cet ensemble. – user918953

Répondre

0

Je traversais la documentation et a constaté que pour les collections non génériques au cours de la cartographie en profondeur, on peut spécifier les objets à l'aide

<field> 
    <a>customer.nameParts[0].name</a> 
    <b>firstName</b> 
    <a-deep-index-hint>com.example.Customer, com.example.NamePart</a-deep-index-hint> 
</field> 
0

aller un niveau plus profond. comme ceci

<mapping> 
    <class-a>Order</class-a> 
    <class-b>OrderShippingDetail</class-b> 
    <field> 
     <a>customer.nameParts[0]</a> 
     <b>this</b> 
    </field> 
</mapping> 

<mapping> 
    <class-a>{class of object @ nameparts[0]}</class> 
    <class-b>OrderShippingDetail</class-b> 
    <field><a>name</a><b>firstname</b></field> 
</mapping> 

cela fonctionne comme une solution. J'ai utilisé cette astuce pour le faire fonctionner à certains endroits.

+0

Je ne sais pas ce que ** ce ** fait lors de la cartographie. pouvez-vous expliquer ou donner un lien pour cela? – user918953

Questions connexes