2010-09-02 1 views
2

Je peux persister un objet dans le DB de Java en tant que tel:Existe-t-il un moyen de charger un objet dans Hibernate sans écrire une requête ou avoir un identifiant?

Tableau Personne:

varchar name 
varchar groupID 
varchar emailAddress 
key on (name, groupID) 

Et en Java

Person foo = new Person("dhackner", "3"); 
session.persist(foo); 

Les deux arguments constituent la clé. Dans ce cas, name et groupID sont la clé unique dans la BD, et donc suffisants pour identifier distinctement une ligne particulière de la table (peut avoir plusieurs entrées "dhackner", plusieurs entrées "group 3", mais seulement une "dhackner, group 3 "entrée).

En supposant la configuration correcte, ce code entraînera avec succès dans

name | groupID | emailAddress 
dhackner |  3 |   "" 

Je voudrais pouvoir faire l'inverse de ce sans écrire une requête ou d'utiliser des ID autogénérées:

Tableau Personne:

name | groupID | emailAddress 
dhackner |  3 | "something" 
dhackner |  4 |  "foobar" 
    other |  3 |  "barfoo" 

En Java:

Person foo = new Person("dhackner", "3"); 
foo.load(); // something like this 
Assert.assertEquals(foo.getEmailAddress(), "something"); 
+0

Je crois que vous êtes autorisé clés naturelles dans certaines conditions. C'est ce que tu veux dire? Ou généralement sur un terrain unique? Et vous pouvez bien sûr toujours abstraire la requête – extraneon

Répondre

5

Oui il y a, il est appelé query by example il est assez simple en veille prolongée:

Person foo = new Person("dhackner", "3"); 
foo = session.createCriteria(Person.class).add(Example.create(foo)).uniqueResult(); 
Assert.assertEquals(foo.getEmailAddress(), "something"); 
+0

Cela ressemble à quelque chose qui pourrait vous être utile. Upvoted. –

Questions connexes