2010-03-01 73 views
12

嗨,JPA屬性java.net.URL

我有一個對象有一段URL信息與它關聯。 目前我保存這個URL在一個簡單的字符串屬性,但會的java.net.URL提供 我額外的東西,如惡意網址的檢測等

在另一方面,我會認爲這是非常難看,如果JPA只需爲URL對象創建一個LOB即可。有誰知道如何通過兼容的JPA提供程序將類型爲java.net.URL的屬性持久保存到數據庫 ?

+0

我不認爲JPA規範提供了這一點。你正在使用哪個實現? – skaffman 2010-03-01 11:00:51

+2

例如Hibernate有這個 – skaffman 2010-03-01 11:11:48

+0

的JPA擴展,例如DataNucleus對此(以及許多其他標準類型)具有JPA(和JDO)擴展, – DataNucleus 2010-03-01 11:40:44

回答

11

按照JPA規範:

持久連接的視場或 性質也許的以下類型的實體: Java基本類型; java.lang.String中; 其他Java序列化類型 (包括原始 類型的包裝,java.math.BigInteger中, java.math.BigDecimal中,java.util.Date, java.util.Calendar中[7],java.sql.Date, java.sql.Time,java.sql.Timestamp, 用戶定義的可序列化類型,byte [], Byte [],char [],andCharacter []); 枚舉;實體類型和/或實體類型的集合;和 可嵌入類(請參閱部分 2.1.5)。

加上對集合的支持。但沒有URL的原始支持。然而,他們會被支持爲Serializable,我想這將導致您提到的LOB。

但是,你應該能夠很容易地規避:你可以有URL作爲一個字段,一個getter/setter方法是將從StringURL雖然String。然後,您將該字段與註釋進行映射。

或者相反:java.lang.URL在一個字段中,並且getter/setter將URL轉換爲String,那麼您將getter/setter映射爲註釋。我認爲它也適用。

1

您也可以使用JPA AttributeConverter如解釋hereURL對象映射到String柱(Hibernate並不認爲開箱)

或者,如果你只是在驗證interrested,你可以使用BeanValidation 。有一個@URL註釋中HibernateValidator擴展你也可以創建自己的約束,如解釋here

我personnaly喜歡BeanValidation解決方案,因爲考慮網址爲java.net.URL帶來一定的複雜性:需要JPA AttributeConverter,JSF Converter,JAXB Adapter .. 。雖然它只是用於驗證