2011-02-09 2 views
1

J'ai une table simple dans Oracle db avec les colonnes: "KEY", "VALUE". Je voudrais mapper cette table dans mon code java en tant que est-ce qu'il y a une façon de le faire directement dans JPA? ou devrais-je le faire manuellement?Mapper la table de base de données à un Hashtable

Merci, ray.

Répondre

0

Vous pouvez utiliser ce morceau de code:

public Map<String, String> getAll() { 
    Map<String, String> ret = new HashMap<String, String>(); 
    Query query = em.createQuery("select kvp from KeyValuePair kvp"); 
    for (KeyValuePair kvp : query.getResultList()) 
    { 
     ret.put(kvp.getKey(), kvp.getValue()); 
    } 
    return ret; 
} 

Gardez à l'esprit que si votre table est trop grande, vous pourriez finir par avoir des problèmes de mémoire.

+0

"pour (KeyValuePair kvp: query.getResultList())" le KeyValuePair kvp doit être référé comme quoi? – rayman

+0

'KeyValuePair' serait votre classe persistante que vous remplissez via JPA. –

2

Si la clé et la valeur sont les types de base ou intégrés vous voulez utiliser

@ElementCollection 
@CollectionTable(name = "table") 
@MapKeyColumn(name = "KEY") 
@Column(name = "VALUE") 
protected Map<A,B> map; 

Si elles sont ENTITES alors vous voulez jeter un oeil à la documentation pour ce qui suit, de sorte que vous pouvez choisir qui est le plus approprié.

@OneToMany 
@ManyToMany 
@MapKey 
@MapKeyClass 
+0

ils clé et la valeur sont chaîne. Je ne pourrais pas trouver les annotaions que vous mentionnez ci-dessus (@elementCollection, CollectionTable ..) pourriez-vous passer s'il vous plaît un exemple? – rayman

+0

@rayman - Ce sont des annotations JPA2 ('javax.persistence'). Si vous n'avez que JPA1, il existe des alternatives spécifiques au fournisseur, mais sinon vous devrez revenir à la cartographie manuelle (comme la réponse de Pablo). – OrangeDog

Questions connexes