Как сгенерировать namedQuery с помощью спящего режима? - PullRequest
1 голос
/ 02 декабря 2010

Я работаю в проекте, в котором классы сущностей Java генерируются из схемы БД с помощью инструмента hibernate.Я хотел бы иметь именованные запросы в сгенерированных классах, чтобы иметь возможность находить сущности по одному из их полей не первичного ключа.Я хотел бы, чтобы namedQueries был таким: findUserByName или findUserByHeight.Именованные запросы будут оптимальным выбором для этой цели, кроме entitymanger.find () и Criteria API.

Мой вопрос заключается в том, как настроить стратегию hibernate tool / hbm2java / reverse engineering для генерации namedQueries для каждого столбца в таблице базы данных,Я не нашел соответствующей информации в интернете.Я надеюсь, что это возможно.С помощью диспетчера устойчивости Eclipse JPA 2.0 в NetBeans мне удалось сгенерировать именованные запросы.

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Если вы используете Spring, то вам стоит взглянуть на Hades .Он обеспечивает функциональность для создания операторов SQL из имен методов.Единственное, что вам нужно сделать, это написать интерфейс (DAO) - его реализация "имитируется" Hades.

Таким образом, вы можете сделать что-то вроде написания объявления метода, например:

public interface CustomerDAO {
  List<Customer> findByFirstName(String firstName);
}

Если имя метода - сопоставление статов sql не работает для сложных запросов, то Аид обеспечивает функциональность для использования операторов, определенных в аннотациях.очень нравится этот проект

0 голосов
/ 13 сентября 2014

Не лучше ли вручную генерировать только те запросы, которые вам действительно нужны? У меня такая же настройка, когда мои pojos и отображения автоматически генерируются, а также есть желание использовать именованные запросы.

Я решил это, создав новый файл централизованного отображения, в котором хранятся ВСЕ мои именованные запросы. Даже если мне придется снова выполнить процесс автоматического создания REVENG, этот файл сопоставления запросов не будет заменен и будет работать.

Я понимаю, что вы хотите сделать. Вы хотите, чтобы REVENG автоматически включал именованные запросы в сгенерированный код / ​​отображения. Я пришел к тому же моменту, когда начал с REVENG. Но потом я понял, что REVENG не должен нести ответственность за это. Он должен скорее генерировать вещи из db-схемы. Не больше и не меньше. Именованные запросы не являются частью db-схемы. Так что REVENG не следует использовать здесь.

Посмотрите здесь :

0 голосов
/ 02 декабря 2010

Боюсь, это не совсем стиль Java.

Методы, которые вы хотели бы, напоминают мне о Rails и Grails, понятиях, которые плохо работают с таким статичным зверем, как Java.(не поймите меня неправильно, я люблю своего зверя).

Spring Roo имитирует то, что делают рельсы и грааля, и генерирует методы Controller, подобные тем, которые вы хотели бы, но это означало быприходится использовать Spring Roo.

Другая идея - постобработка вашего сгенерированного кода с использованием анализатора исходного кода .Но это также будет сложный вызов.

Вероятно, вам лучше всего получить код инструмента hbm2java и добавить хук для ваших процедур.

...