Подтвердить что ты не робот

JPA-свойство java.net.URL

HI,

У меня есть объект, у которого есть связанная с ним часть URL-информации. В настоящее время я сохраняю этот URL в простом свойстве String, но java.net.URL будет предоставить мне дополнительные преимущества, такие как обнаружение неверных URL и т.д.

С другой стороны, я считаю это очень уродливым, если JPA просто создала LOB для URL-объекта. Кто-нибудь знает, как свойство типа java.net.URL будет сохраняться базы данных совместимыми поставщиками JPA?

4b9b3361

Ответ 1

В соответствии со спецификацией 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, определяемые пользователем сериализуемые типы, байт [], Байт [], char [] и символ []); перечисления; типы сущностей и/или коллекции типов сущностей; а также встраиваемые классы (см. раздел 2.1.5).

Плюс поддержка коллекций. Но никакой примитивной поддержки URL. Тем не менее, они будут поддерживаться как Serializable, что, по вашему мнению, приведет к большому количеству объектов, как вы упомянули.

Но вы должны быть в состоянии легко обойти это: у вас может быть URL как String в поле и геттер/сеттер, который конвертирует с String в URL. Затем вы сопоставляете поле с аннотацией.

Или наоборот: java.lang.URL в поле, а getter/setter - от URL до String, затем вы сопоставляете геттер/сеттер с аннотацией. Я думаю, что это работает.

Ответ 2

Вы также можете использовать JPA AttributeConverter, например, объяснить здесь, чтобы сопоставить объект URL в столбце String (Hibernate делает это из коробки)

Или, если вас интересуют только проверки, вы можете использовать BeanValidation. В расширении HibernateValidator есть аннотация @URL, вы также можете создать собственное ограничение, например, объяснить здесь

Я лично предпочитаю решение BeanValidation, потому что рассмотрение url как java.net.URL приносит некоторую сложность: потребность в JPA AttributeConverter, JSF Converter, JAXB Adapter... пока это просто для проверки