Gibt es eine Möglichkeit, ein Objekt in dem Ruhezustand zu laden, ohne eine Abfrage zu schreiben oder eine ID zu haben?

StackOverflow https://stackoverflow.com/questions/3630450

  •  26-09-2019
  •  | 
  •  

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");
War es hilfreich?

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top