2010-06-11 7 views
7

Ich verwende Hibernate-Annotationen. Wie füge ich Methoden zum POJO-Objekt hinzu? Zum Beispiel habe ich "getChildNodes" -Methode, die mit der Datenbank verknüpft ist, aber ich möchte auch die rekursive Methode "getAllChildNodes" hinzufügen. Ich bekomme "org.hibernate.PropertyNotFoundException: Konnte keinen Setter für den Fortschritt der Eigenschaft in der Klasse" finden, wenn ich es tue.Java, Hibernate-Annotationen, Methoden zum POJO-Objekt hinzufügen?

+0

zeigen Sie Ihren Code. – Bozho

Antwort

9

Wenn ich interpretieren dies als „Wie füge ich eine Methode, die nicht auf Ausdauer verwandt ist“, dann müssen Sie die @Transient Anmerkung auf der getAllChildNodes() Methode verwenden

+0

Ich bin verwirrt. Fügen Sie keine zusätzlichen Funktionen wie getAllChildNodes() oder publish() hinzu, um es zum Beispiel nicht mehr zu einem POJO zu machen? Und verstößt damit gegen ein Design-Prinzip von Hibernate-Objekten, die POJOs sein müssen und daher "schlecht" sind? Aber warum wäre es schlecht? Ich möchte das tun, aber ich bin mir nicht sicher, ob es der richtige Weg ist. – pete

-1

Öffnen Sie die .java-Datei und schreiben Sie eine Methode namens getAllChildNodes().

Hibernate schreibt keinen Code für Sie, er ordnet Felder in Ihrer Datenbank Ihrem Code zu. Das ist alles. Wenn Sie neben den normalen Gettern und Settern für Ihre Eigenschaften zusätzliche Logik in Ihren Domänen-/Modellklassen haben möchten, müssen Sie sie selbst hinzufügen.

1

Es gibt zwei Möglichkeiten, die Struktur Ihres Unternehmens definieren .

  • mit Anmerkungen auf den Instanzvariablen Ihres Unternehmens oder
  • Anmerkungen auf den Getter-Methoden Ihres Unternehmens mit

Wenn auf Getter-Methoden die Anmerkungen verwenden, wird davon ausgegangen Hibernate, dass jeder getXXX (und isXxx für boolesche Typen) repräsentiert die Definition einer persistenten Eigenschaft. Und dies gilt auch dann, wenn der betreffende Getter keine Anmerkungen enthält, wie es in Ihrem Fall der Fall ist.

Hibernate erwartet außerdem, für jede persistente Eigenschaft eine passende Setter-Methode zu finden. Und in Ihrem Fall ist das was fehlt und verursacht die Ausnahme.

Sie können dieses Problem lösen, indem Sie Ihren benutzerdefinierten Getter als @Transient deklarieren, der besagt, dass dieser Getter keine dauerhafte Eigenschaft darstellt. Ein anderer Weg wäre, die Entität zu konvertieren, um Annotationen für die Instanzvariablen zu verwenden. Letzteres wäre meine persönliche Entscheidung.

Verwandte Themen