2015-04-10 4 views
1

Мне нужно назначить значение карты моей сущности, но jpa пытается сохранить объект отверстия как массив байтов.JPA ElementCollection Map <Integer, Entity>

@Entity 
public class ImageSet { 
    ... 
    @ElementCollection 
    private Map<Integer, Image> images = new LinkedHashMap<>(); 
} 

@Entity 
public class Image { 
    ... 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
} 

Я думаю, что это не так сложно, но я не могу найти примеры в Интернете. Не могли бы вы мне помочь? Большое спасибо!

+0

Не уверен, но вам не нужно аннотировать класс как '' '@ Entity''' от' '' javax.persistence.Entity''' – Manu

+0

Извините, забыл добавить – perotom

ответ

1

Ассоциация аннотацию @ElementCollection действительна для следующих типов отображения:

  • Map<Basic,Basic>
  • Map<Basic,Embeddable>
  • Map<Embeddable,Basic>
  • Map<Embeddable,Embeddable>
  • Map<Entity,Basic>
  • Map<Entity,Embeddable>

Ассоциация с аннотацией @OneToMany/@ManyToMany действительна для следующих типов отображения:

  • Map<Basic,Entity> (это ваш случай)
  • Map<Embeddable,Entity>
  • Map<Entity,Entity>

В соответствии с вышеуказанными правилами субъекты могут выглядеть следующим образом:

@Entity 
public class ImageSet { 
    ... 
    @OneToMany(mappedBy="container") 
    @MapKey //map key is the primary key 
    private Map<Integer, Image> images = new LinkedHashMap<>(); 
} 

@Entity 
public class Image { 
    ... 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    private ImageSet container; 
} 

Обратите внимание, что двунаправленная связь между ImageSet.images и Image.container является необязательной, но удалить его бы создать дополнительную таблицу в базе данных.