2010-12-05 6 views
2

Привет, ребята Я переношу приложение с помощью hibernate из xml в JPA-аннотации. В настоящее время я застреваю при отображении карты объектов с составным идентификатором, используя аннотации Вот как я пытаюсь это сделать.Сопоставление коллекции карт с аннотациями 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 
} 

Я также попытался

@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    

не повезло

в отображении XML это выглядит следующим образом

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

спящем 3.2.7.ga и аннотации 3.4.0 .GA

thx!

ответ

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

сделал работу, проблема оказалась в отображении составного идентификатора класса B

Приветствий

1

Дайте этому попытку:

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

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

я мог бы что-то отсутствует, но @MapKeyColumn является важной частью. Я сделал это успешно, но мой код находится в офисе, поэтому я не могу его дважды проверить.

+0

Я попытался это, как хорошо, но я получаю исключение SQL: «java.sql. SQLException: ORA-00972: идентификатор слишком длинный «Это означает, что что-то не так в сгенерированном SQL-заявлении, потому что имена не слишком длинны :) –

+0

@OneToMany() @JoinColumn (name =" A_ID ", insertable = false, updatable = false) @MapKeyColumn (name = "B_ID"), сделал работу! и проблема оказалась в сопоставлении класса B. ура –

Смежные вопросы