2009-07-09 5 views
0

Ich verwende Annotationen, um einer vorhandenen Entität wie dieser eine grundlegende Sammlung von Strings zuzuordnen. Innerhalb der übergeordneten Entitätsklasse:Hinzufügen von automatisch generierten Datums-/Zeitstempel zu einer zugeordneten Sammlung von Strings (Hibernate-Annotationen)

@org.hibernate.annotations.CollectionOfElements 
@JoinTable (name="GoalToAchieve_entry", [email protected](name="goalToAchieve_id")) 
@org.hibernate.annotations.Sort(type = org.hibernate.annotations.SortType.NATURAL) 
private SortedSet<String> entries = new TreeSet<String>(); 

Das funktioniert gut. Ich habe eine 2-Spalten-Tabelle (goalToAchieve_id und Element), die sich aus dem Join ergibt. Ich frage mich also, wie ich jedem String der Sammlung einen Datums-/Zeitstempel (automatisch von MySQL generiert) hinzufügen kann. So dass ich eine 3. Spalte mit einem Zeitstempel jedes Mal anzeigen kann, wenn ein neuer String zur Sammlung hinzugefügt wird? Das Ziel besteht darin, eine Sammlung von einfachen Objekten (Strings) zu verwenden und keine neue Entität (mit einem Zeit-/Datumsfeld) zu erstellen.

Gibt es einen empfohlenen Weg, dies zu tun? Ich glaube, selbst wenn ich ein Zeitstempelfeld an der jsp-Schnittstelle zur Verfügung stelle, die das Hinzufügen neuer Zeichenfolgen zur Sammlung handhabt, wäre es immer noch ein Problem mit dem Ruhezustand, da ich den Zeitstempel auf der Datenbank beibehalten muss.

Vielen Dank im Voraus für jede Hilfe.

Herzlichst

Antwort

1

Hibernate @CollectionOfElements kann mit mehr als nur einfache Typen verwendet werden. Sie können eine Klasse definieren, die zwei Felder enthält, Ihren String-Wert und einen Zeitstempel, und diese Klasse mit @Embeddable annotieren. Hibernate wird das dann in der Datenbank als zwei separate Datenspalten beibehalten. Diese Klasse repräsentiert keine Entität, sondern nur einen zusammengesetzten Werttyp.

Das nächste Problem ist, wie generieren Sie diesen Zeitstempel. Sie könnten es in Java tun, mit dem voreingestellten Wert des Feldes "new Date()" (oder was auch immer).

+0

Danke! Ich dachte eher an die Verwendung von @Temporal. Würdest du denken, dass es in diesem Fall funktionieren könnte, mit jedem neuen Einfügen eines String-Wertes einen neuen Zeitstempel zu erzeugen? – denchr

+0

Aye, das sollte funktionieren, denke ich. Ich habe @Temporal selbst nie benutzt und sein Verhalten scheint nicht gut dokumentiert zu sein, aber es sieht praktisch aus. – skaffman