развязка строк и имен полей - PullRequest
3 голосов
/ 27 октября 2011

У меня есть ряд доменных / бизнес-объектов, на которые при использовании в критериях гибернации ссылается имя поля в виде строки, например:

Criteria crit = session.createCriteria(User.class);
Order myOrdering = Order.desc("firstname");
crit.addOrder(myOrdering);

Где имя - это поле / свойство User.class .

Я мог бы вручную создать Enum и сохранить все строки там; есть ли другой способ, который я пропускаю и требует меньше работы (я, вероятно, забуду сохранить Enum).

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Боюсь, что нет хорошего способа сделать это. Даже если вы решите использовать отражения, вы обнаружите проблему только после запуска запроса.

Но есть немного лучшее решение, как обнаружить проблему на ранней стадии: если вы используете именованные запросы (javax.persistence.NamedQueries), вы получите все свои запросы, скомпилированные, как только ваши объекты будут обработаны Hibernate, в основном это произойдет во время запуска сервера. Поэтому, если какой-либо объект был изменен, нарушая запрос, вы узнаете об этом при следующем запуске сервера, а не при фактическом выполнении запроса.

Надеюсь, это поможет.

1 голос
/ 27 октября 2011

Это одна из вещей, которая раздражает меня в спящем режиме.

В любом случае, в прошлом я решал эту проблему, используя один из двух механизмов: либо настраивая шаблоны, используемые для генерации базовых классов из файлов конфигурации Hibernate, либо опрашивая мои классы Hibernate для аннотаций / свойств и генерируя соответствующие перечисления, классы , константы и т. д. от этого. Это довольно просто.

Это добавляет шаг к процессу сборки, но IMO это было именно то, что мне было нужно, когда я это сделал. (Последние несколько проектов я не делал, но для больших, многопользовательских вещей мне это очень нравится.)

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