2010-03-01 6 views
12

HI,proprietà JPA java.net.URL

Ho un oggetto che ha un pezzo di URL-Informazioni associate ad esso. Attualmente mi salvare questo URL in una semplice proprietà String, ma java.net.URL sarebbe fornire me con chicche aggiuntive, come il rilevamento di URL malformati ecc

D'altra parte riterrei molto brutto, se JPA semplicemente creato un LOB per l'oggetto-URL. Qualcuno sa come una proprietà del tipo java.net.URL verrà mantenuta nel database da parte dei fornitori JPA conformi?

+0

Non penso che la specifica JPA lo preveda. Quale implementazione stai usando? – skaffman

+2

ad es. Hibernate ha estensioni JPA per questo – skaffman

+0

, per esempio DataNucleus ha estensioni JPA (e JDO) per questo (e molti altri tipi standard) – DataNucleus

risposta

11

Come per la specifica JPA:

I campi persistenti o le proprietà di un'entità forse dei seguenti tipi: Java tipi primitivi; java.lang.String; altri tipi serializzabili Java (compresi gli involucri dei primitivi tipi, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar [7], java.sql.Date, java.sql.Time, java.sql.Timestamp, tipi serializzabili definiti dall'utente, byte [], Byte [], carattere [] e carattere []); enumerazioni; tipi di entità e/o collezioni di tipi di entità; e classi incorporabili (vedere la sezione 2.1.5).

Oltre al supporto per le raccolte. Ma nessun supporto primitivo di URL. Sarebbero tuttavia supportati come Serializable, che suppongo comporterebbe un LOB come lei ha menzionato.

Ma si dovrebbe essere in grado di aggirare facilmente che: si può avere l'URL come String in un campo e un getter/setter che convertono da String a URL però. Quindi mappare il campo con l'annotazione.

O il contrario: la java.lang.URL in un campo, e getter/setter per convertire da URL a String, allora si mappa il getter/setter con l'annotazione. Penso che funzioni pure.

1

È inoltre possibile utilizzare JPA AttributeConverter come spiegare here per mappare un oggetto URL in una colonna String (Hibernate fa che fuori dalla scatola)

Oppure, Se siete interessati solo nella validazione, è possibile utilizzare BeanValidation . V'è un'annotazione @URL in estensione HibernateValidator è anche possibile creare il proprio vincolo come spiegare here

ho personnaly preferisco la soluzione BeanValidation perché considerando URL, java.net.URL portare una certa complessità: necessità di JPA AttributeConverter, JSF Converter, JAXB Adapter .. Mentre è solo per la convalida