J'ai deux entités, Entity1 et Entity2, sur une relation un à plusieurs. Sur Entity1 j'ai une carte qui contient des entrées.Problème de carte avec JPA/Hibernate/PG
Le code que j'utilise pour persister une nouvelle Entité1 avec quelques Entity2 sur la carte est comme ceci:
Entity1 e1 = new Entity1();
Entity2 e2 = null;
e1.setE2s(new HashMap<String, Entity2>());
for (String key : someKeySet()){
e2 = new Entity2();
e2.setCode(key);
e2.setSwhon(true);
e2.setE1(e1);
e1.getE2s(key, e2);
em.persist(e1.getE2s().get(key));
}
em.persist(e1);
em.flush();
et voici une exctract des entités:
@Entity
@Table(name = "wm_Entities1")
public class Entity1 implements Serializable {
private static final long serialVersionUID = 6592708276573465599L;
private Map<String, Entity2> e2s;
private Long id;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setE2s(Map<String, Entity2> e2s){
this.e2s = e2s;
}
@OneToMany(mappedBy = "e1", fetch = FetchType.EAGER)
public Map<String, Entity2> getE2s() {
return e2s;
}
}
@Entity
@Table(name = "wm_Entities2")
public class Entity2 implements Serializable {
private static final long serialVersionUID = -6131765066573346790L;
private long id;
private Entity1 e1;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@ManyToOne()
@JoinColumn(name="e1_id")
public Entity1 getE1() {
return this.e1;
}
public void setE1(Entity1 e1) {
this.e1 = e1;
}
}
Cela semble fonctionner correctement car il insère les deux entiti es sur la base de données pg, mais le problème est qu'il ne crée pas - en sauvegardant la MapKey de l'e2 sur la base de données (théoriquement JPA génère cette clé), donc quand je récupère l'e1, j'essaye d'obtenir la map e2s , je l'ai un:
javax.ejb.EJBException: org.hibernate.HibernateException: null colonne d'index pour collection:
Comment puis-je obtenir ce MapKey sauvé ??
Remarque: J'utilise JavaEE avec JPA/Hibernate, sur JBoss 4.2, avec DB PGSQL.
Est-ce une faute de frappe sur la ligne 3? L'entité ne devrait-elle pas être e1? – laz
En outre, répondre à cette question nécessiterait de voir comment les entités persistantes sont annotées. – laz
a corrigé l'erreur et ajouté le code de classe d'entités persistantes. –