Gibt es eine Möglichkeit, ein Objekt in dem Ruhezustand zu laden, ohne eine Abfrage zu schreiben oder eine ID zu haben?
Frage
kann ich ein Objekt in die DB von Java als solche bestehen bleiben:
Tabelle Person:
varchar name
varchar groupID
varchar emailAddress
key on (name, groupID)
Und in Java
Person foo = new Person("dhackner", "3");
session.persist(foo);
Die beiden Argumente der Schlüssel bilden. In diesem Fall ist der Namen und groupID ist der eindeutige Schlüssel in dem DB, und somit ausreichend ist, um eindeutig eine bestimmte Zeile in der Tabelle zu identifizieren (kann mehrere „dhackner“ Einträge, mehr „Gruppe 3“ Einträge, aber nur eine „dhackner, Gruppe hat 3" entry).
korrekte Einstellung Unter der Annahme, dass Code in erfolgreich führt
name | groupID | emailAddress
dhackner | 3 | ""
Ich möchte in der Lage sein, das Gegenteil von dem, zu tun, ohne eine Abfrage oder mit irgend automatisch generierte IDs schreiben:
Tabelle Person:
name | groupID | emailAddress
dhackner | 3 | "something"
dhackner | 4 | "foobar"
other | 3 | "barfoo"
In Java:
Person foo = new Person("dhackner", "3");
foo.load(); // something like this
Assert.assertEquals(foo.getEmailAddress(), "something");
Lösung
Ja, es ist, wird es genannt query by example es ist ziemlich einfach in den Ruhezustand:
Person foo = new Person("dhackner", "3");
foo = session.createCriteria(Person.class).add(Example.create(foo)).uniqueResult();
Assert.assertEquals(foo.getEmailAddress(), "something");