Est-il possible de charger un objet dans Hibernate sans écrire une requête ou d'avoir une carte d'identité?
Question
Je peux persister un objet dans le DB de Java en tant que tel:
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, le nom et groupID sont la clé unique dans la base de données, et donc suffisante pour identifier distinctement une ligne dans le tableau (peut avoir plusieurs entrées « dhackner », plusieurs « groupe 3 » entrées, mais un seul « dhackner, groupe 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 générées automatiquement:
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");
La solution
Oui, il y a, il est appelé requête par exemple 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");