2010-03-01 9 views
12

HI,JPA Eigenschaft java.net.URL

Ich habe ein Objekt, das ein Stück URL-Information zugeordnet hat. Derzeit ich diese URL in einer einfachen String-Eigenschaft speichern, aber java.net.URL würde gibt mir zusätzliche Goodies wie der Erkennung von fehlerhaften URLs usw.

Auf der anderen Seite würde ich halte es für sehr hässlich, wenn JPA Erstellt einfach ein LOB für das URL-Objekt. Weiß jemand, wie eine Eigenschaft vom Typ java.net.URL bis der Datenbank durch konforme JPA-Provider beibehalten wird?

+0

Ich glaube nicht, dass die JPA-Spezifikation dafür sorgt. Welche Implementierung verwenden Sie? – skaffman

+2

z.B. Hibernate verfügt über JPA-Erweiterungen für diese – skaffman

+0

, z. B. DataNucleus hat JPA (und JDO) Erweiterungen für diese (und viele andere Standardtypen) – DataNucleus

Antwort

11

Gemäß der JPA-Spezifikation:

den persistenten Felder oder Eigenschaften von ein Unternehmen vielleicht des folgenden Typs: Java primitive Typen; java.lang.String; andere Java serializable Typen (einschließlich Umhüllungen der primitiven Typen, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar [7], java.sql.Date, java.sql.Time, java.sql.Timestamp, vom Benutzer definierte serialisierbare Typen, byte [], Byte [], char [] und Character []); enums; Entitätstypen und/oder Sammlungen von Entitätstypen; und einbettbare Klassen (siehe Abschnitt 2.1.5).

Plus die Unterstützung für Sammlungen. Aber keine primitive Unterstützung von URL. Sie würden jedoch als Serializable unterstützt werden, was zu einem LOB führen würde, wie Sie erwähnt haben.

Aber Sie sollen in der Lage sein, leicht, dass zu umgehen: Sie die URL als String in einem Feld haben können und ein Getter/Setter, die zwar von String zu URL konvertieren. Dann ordnen Sie das Feld mit der Anmerkung zu.

Oder das Gegenteil: die java.lang.URL in einem Feld, und Getter/Setter konvertieren von URL zu String, dann ordnen Sie die Getter/Setter mit der Anmerkung. Ich denke, es funktioniert auch.

1

Sie können auch JPA verwenden AttributeConverter wie erklären here ein URL Objekt in eine String Spalte zur Karte (Hibernate macht das aus dem Kasten)

Oder, wenn Sie nur bei der Validierung interressiert sind, können Sie BeanValidation verwenden . Es gibt eine @URL Anmerkung in HibernateValidator Erweiterung, die Sie auch so Ihre eigene Einschränkung erstellen, wie here

erklären Ich ziehe personnaly die BeanValidation Lösung, weil url bedenkt wie java.net.URL einige Komplexität bringen: Notwendigkeit für JPA AttributeConverter, JSF Converter, JAXB Adapter .. .während es nur zur Bestätigung ist

Verwandte Themen