JPA属性java.net.URL

HI,

我有一个对象,它有一段与之相关的URL信息。 目前我将此URL保存在一个简单的String属性中,但java.net.URL会为我提供额外的好处,例如检测格式错误的URL等。

另一方面,如果JPA只是为URL-Object创建了一个LOB,我认为它非常难看。 有谁知道兼容的JPA提供程序如何将java.net.URL类型的属性保存到数据库?

根据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,user-de fi ned serializable types,byte [],Byte [],char [],andCharacter []); 枚举; 实体类型和/或实体类型集合; 和可嵌入的类(参见第2.1.5节)。

加上对collections品的支持。 但没有URL原始支持。 然而,它们将被支持为Serializable ,我想这将导致你提到的LOB。

但是你应该能够轻松地规避这一点:你可以在一个字段中将URL作为String ,然后将一个从String转换为URL的getter / setter。 然后使用注释映射该字段。

或者相反:字段中的java.lang.URL ,以及从URL转换为String的getter / setter,然后使用注释映射getter / setter。 我认为它也有效。

您还可以使用JPA AttributeConverter如此处的说明)将URL对象映射到String列中(Hibernate可以开箱即用)

或者,如果您只对validation感兴趣,则可以使用BeanValidation。 在HibernateValidator扩展中有一个@URL注释,你也可以创建自己的约束,例如解释

我个人更喜欢BeanValidation解决方案,因为考虑到url为java.net.URL带来一些复杂性:需要JPA AttributeConverter ,JSF Converter ,JAXB Adapter …而它只是用于validation