Возможности и ограничения выполнения запроса критериев для объекта типа java.net.URL - PullRequest
1 голос
/ 28 ноября 2011

У меня есть таблица базы данных, в которой я храню URL (например, http://google.com).У сущности, соответствующей таблице, есть поле типа URL , поэтому я создаю запрос критерия, подобный следующему:

CriteriaBuilder cb = ...
Path<URL> path = ...
cb.equal(path , new URL("http://google.com"));

Это работает, как и предполагалось, однако я хочу иметь возможность сделатьчто-то вроде этого:

cb.like(path.<String>get("externalForm"), "%google%");

Очевидно, что URL не имеет поля externalForm , но вместо него есть метод toExternalForm () .

Возможен ли такой запрос с помощью API?Если да, то как?Или лучше всего сопоставить столбец URL со строкой вместо URL?

1 Ответ

2 голосов
/ 28 ноября 2011

Нет, нельзя вызывать методы постоянных значений в запросах критериев.JPQL имеет то же ограничение.В конце концов, оба из них преобразуются в запрос SQL, и вызывающий метод в произвольном объекте Java не слишком хорошо вписывается.

Также в вашем случае не имеет значения, пытаемся ли мы получить доступ к этому через поле или метод.Причина в том, что поля в java.net.URL отличаются от постоянных атрибутов, отображаемых в ваших сущностях.Поля URL не сохраняются напрямую (поэтому вы не можете запрашивать их в SQL), Сериализуемые объекты просто сохраняются посредством сериализации в байтовый массив или тому подобное.

Кроме того, вызов equals в java.net.URL может вызвать неожиданности: java.net.url Javadoc

Просто используйте тип String и следите за тем, чтобы поле в базе данных было достаточно длинным и для удивительно длинных URL.

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