2010-12-05 38 views
2

Salut les gars Je Migrer une application à l'aide de mise en veille prolongée xml aux annotations JPA. Actuellement, je suis coincé sur la cartographie d'une carte d'objets avec l'ID composé en utilisant des annotations Voilà comment j'essaie de le faire.Cartographie d'une collection de cartes avec annotations JPA



class A 
{ 
    ... 
    @OneToMany() 
    @JoinColumn(name="A_ID") 
    /* B_ID should be the key in this map */ 
    private Map map = new HashMap(); 
} 

class B 
{ 
    @EmbeddedId 
    private CompoundId id; 
} 

@Embeddable 
class CompoundId 
{ 
    @Column(name = "A_ID") 
    String aId; 

    @Column(name = "B_ID") 
    long bId 
} 

J'ai aussi essayé

@OneToMany() 
@JoinColumn(name="A_ID", insertable=false, updatable=false) 
@MapKeyColumn(name="B_ID") 
private Map map = new HashMap(); 

Caused by: java.sql.SQLException: ORA-00904: "B1_"."ID": invalid identifier    

sans chance

en XML mapping il ressemble à ce

<map name="map" inverse="true" cascade="all-delete-orphan" lazy="false"> 
<key> 
    <column name="A_ID" /> 
</key> 

<map-key type="long" column="B_ID"/> 
<one-to-many class="B" /> 
</map> 

mise en veille prolongée 3.2.7.ga et annotations 3.4.0 .GA

thx!

Répondre

1
@OneToMany() 
@JoinColumn(name="A_ID", insertable=false, updatable=false) 
@MapKeyColumn(name="B_ID") 
private Map map = new HashMap(); 

a fait le travail, le problème semble être dans la cartographie de id composite de classe B

Cheers

1

pour cette solution:

@Entity 
public class A { 
    @Id private String id; 

    @OneToMany() 
    @MapKeyColumn(name="B_ID") 
    private Map<String, Long> associatedBs; 
    // ... 
} 

je pourrais manquer quelque chose, mais le @MapKeyColumn est la partie importante. Je l'ai fait avec succès avant, mais mon code est au bureau, donc je ne peux pas vérifier.

+0

J'ai essayé cela aussi, mais je reçois exception SQL: « java.sql. SQLException: ORA-00972: identifiant est trop long » ce qui signifie que quelque chose ne va pas dans le produit instruction SQL, cause les noms ne sont pas trop long :) –

+0

@OneToMany() @JoinColumn (name = "A_ID", insérable = false, updatable = false) @MapKeyColumn (name = "B_ID"), a fonctionné! et le problème semblait être dans la cartographie de la classe B. À votre santé –