JPA属性java.net.URL

时间:2010-03-01 10:56:31

标签: java jpa persistence

HI,

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

另一方面,如果JPA只是为URL-Object创建了一个LOB,我认为它非常难看。有谁知道java.net.URL类型的属性将如何持久化 合规JPA提供商的数据库?

2 个答案:

答案 0 :(得分:11)

根据JPA规范:

  

持久性领域或属性   一个实体可能是以下类型:   Java原始类型; java.lang.String中;   其他Java可序列化类型   (包括原语的包装   types,java.math.BigInteger,   java.math.BigDecimal,java.util.Date,   java.util.Calendar [7],java.sql.Date,   java.sql.Time,java.sql.Timestamp,   用户定义的可序列化类型,byte [],   字节[],字符[]和字符[]);   枚举;实体类型和/或   实体类型的集合;和   可嵌入的类(参见第   2.1.5)。

另外还有对收藏品的支持。但没有URL的原始支持。然而,他们将被支持为Serializable,我想这将导致你提到的LOB。

但您应该能够轻松规避这一点:您可以将字段中的网址设为String,然后将String转换为URL的getter / setter。然后使用注释映射字段。

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

答案 1 :(得分:1)

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

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

我个人更喜欢BeanValidation解决方案,因为将url视为java.net.URL会带来一些复杂性:需要JPA AttributeConverter,JSF Converter,JAXB Adapter ...仅用于验证