2011-06-25 2 views
0

J'essaie d'intégrer plusieurs instances du même type complextype dans une seule entité, ce qui ne semble pas fonctionner à moins que je ne définisse un nouveau type complextype pour chaque instance. Autant que je puisse me rattraper jusqu'à présent, c'est probablement à cause de la stratégie de nommage hyperjaxb3 par défaut. Existe-t-il un moyen de modifier la stratégie de dénomination hyperjaxb3 par défaut via des annotations (similaire à la définition de la stratégie d'identifiant, par exemple) plutôt que d'ajouter du code au plugin lui-même? Merci, FrederikConfiguration de la stratégie de dénomination Hyperjaxb3

Répondre

1

Il serait beaucoup plus facile si vous fournissez un exemple de ce que vous essayez de faire: schéma, annotations générées et ce que vous aimeriez avoir généré à la place.

Voici ce que j'ai dans l'un des projets de test. Schéma:

<xs:element name="a" type="aType"/> 
<xs:complexType name="aType"> 
    <xs:sequence> 
     <xs:element name="b0" type="bType" minOccurs="0"/> 
     <xs:element name="b1" type="bType" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="bType"> 
    <xs:annotation> 
     <xs:appinfo> 
      <hj:embeddable/> 
     </xs:appinfo> 
    </xs:annotation> 
    <xs:sequence> 
     <xs:element name="c" minOccurs="0"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="999"/> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
     <xs:element name="d" type="xs:int" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

Génère:

@Embedded 
@AttributeOverrides({ 
    @AttributeOverride(name = "c", column = @Column(name = "B0_C", length = 999)), 
    @AttributeOverride(name = "d", column = @Column(name = "B0_D", precision = 10, scale = 0)) 
}) 
public BType getB0() { 
    return b0; 
} 
@Embedded 
@AttributeOverrides({ 
    @AttributeOverride(name = "c", column = @Column(name = "B1_C", length = 999)), 
    @AttributeOverride(name = "d", column = @Column(name = "B1_D", precision = 10, scale = 0)) 
}) 
public BType getB1() { 
    return b1; 
} 

Je ne vois pas les collisions de nommage.

MISE À JOUR

Voici quelques liens sur la personnalisation de nommer:

Vérifiez ce guide:

http://confluence.highsource.org/display/HJ3/Customization+Guide

Voici un projet de test qui démontre certaines de ces caractéristiques:

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/cu-one

Vous pouvez également écrire et configurer votre propre stratégie de nommage:

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/custom-naming

+0

correcte, je suppose que je suis confus quand la sortie hj3 était pas ce que je pensais, sur un complexType intégré à plusieurs niveaux. Dans l'exemple que vous fournissez, l'ajout d'un troisième complextype intégrable dans bType le marque comme @Transient dans la classe BType, ce qui semble un peu étrange ... Comment les embeddables imbriqués sont-ils traités dans hj3? – Frederik

+0

JPA 1 ne prend pas en charge les Embeddables imbriqués, donc si vous exécutez HJ3 en mode JPA 1, les Embeddables imbriqués sont rendus transitoires. JPA 2 prend cependant en charge les Embeddables imbriqués et HJ3 en mode JPA 2 (disponible dans le courant 0.5.6-SNAPSHOT) le supporte également. Voir ce projet de test: http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/embeddable-jpa2 La fonctionnalité est très récente, cependant, il pourrait y avoir quelques problèmes. – lexicore

+0

Merci, je vais essayer l'instantané. – Frederik

Questions connexes