2010-12-05 5 views
2

Hallo Leute Ich bin migrieren eine Anwendung mit Hibernate von XML zu JPA-Annotationen. Zur Zeit bin ich fest auf die Zuordnung einer Karte von Objekten mit Compound-ID mit Hilfe von Anmerkungen Dies ist, wie ich es versuche.Mapping einer Kartensammlung mit JPA-Annotationen



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 
} 

Ich habe auch versucht

@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    

ohne Glück

in XML-Mapping es ähnliche 3.4.0

<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> 

Hibernate 3.2.7.ga und Anmerkungen sieht .GA

Danke!

Antwort

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

Arbeit tat, schien das Problem bei der Kartierung von Composite-ID von B-Klasse

Prost

1

Geben Sie diesen einen Versuch:

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

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

Ich könnte etwas fehlen, aber die @MapKeyColumn ist der wichtige Teil. Ich habe das schon erfolgreich gemacht, aber mein Code ist im Büro, also kann ich es nicht überprüfen.

+0

ich dies auch versucht haben, zu sein, aber ich bin immer SQL-Ausnahme: „java.sql. SQLException: ORA-00972: Bezeichner ist zu lang "Was bedeutet, dass etwas in der generierten SQL-Anweisung falsch war, weil die Namen nicht zu lang sind? –

+0

@OneToMany() @JoinColumn (name =" A_ID ", einfügbar = false, updateable = false) @MapKeyColumn (name = "B_ID"), hat funktioniert! und das Problem schien in der Zuordnung der Klasse B zu liegen. Prost –