JPA собственность java.net.URL - PullRequest
12 голосов
/ 01 марта 2010

HI,

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

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

Ответы [ 2 ]

11 голосов
/ 01 марта 2010

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

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

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

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

1 голос
/ 27 апреля 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...