Как использовать Spring Roo для ссылочных данных
Я новичок в Spring Roo и собираюсь создать приложение. Мне нужно иметь поля со списком для выбора значений в строковых полях - довольно распространенное требование. Пример Spring Roo Pizza показывает это с использованием перечислимых типов данных enum constant
, но я требую, чтобы исходные значения были доступны для редактирования администратором (т.е. в таблице), чтобы мы могли изменить значения в будущем. Кроме того, я бы предпочел использовать одну таблицу для хранения всех этих списков для упрощения обслуживания.
Я знаю, что SQL, который я хочу создать, будет выглядеть примерно так:
Выберите listvals ОТ listTable WHERE listtype = "status";
Затем в моем раскрывающемся списке будет отображаться что-то вроде: Active, Inactive. Пользователь выберет один, и строка "Active" будет сохранена в целевом поле. И во втором примере мы могли бы использовать:
Выберите listvals ОТ listTable WHERE listtype = "Состояние";
Второй выпадающий список будет отображать что-то вроде: Аляска, Калифорния, Флорида. Пользователь выберет один, и строка "Флорида" будет сохранена в целевом поле.
Мой главный вопрос: как достичь такого рода функции в Roo?
Используя быстрый старт Pizza Shop в качестве песочницы, я попытался определить целевые поля, такие как:
Я изменился: field reference --fieldName base --type ~.domain.Base
чтобы:
field reference --fieldName base --type ~.domain.Base --referencedColumnName name
Который вернул эту ошибку:@JoinColumn name is required if specifying a referencedColumnName
Первоначальная проблема заключается в том, что на данный момент roo еще не создал столбцы идентификаторов строк для БД, поэтому я не знаю имени столбца соединения в базовой таблице. Но если я подожду до тех пор, пока не выполню скрипт с объединением 1:M, столбец pizza.base будет определен как целое число, а не как строка, которую я хочу.
Итак, я запустил скрипт roo в магазине по продаже ванильной пиццы и допросил vanilla db. (Генерирует ли roo сценарий SQL для создания базы данных, на который я мог бы посмотреть?) Как выясняется, roo называет столбец id строки "id" как BigInt. (Я также отмечаю, что он, кажется, не использует функцию SEQUENCE, которую postgres рекомендует для первичных индексов / идентификаторов строк.)
Итак, теперь я бегу:
field reference --fieldName base --type ~.domain.Base --referencedColumnName name --joinColumnName id
Ру это нравится!
Пока я perform tests
где он выбрасывает ряд неразборчивых ошибок в отчетах Surefire.
Я отмечаю, что решение этой проблемы - только шаг 1 для удовлетворения моих общих требований, описанных выше. Шаг 2 будет заключаться в том, чтобы ввести какой-то фильтр или оператор where в ссылочный оператор. Я подозреваю, что это связано с --fetch
опция (Поддержка документов Roo ( http://docs.spring.io/autorepo/docs/spring-roo/1.2.5.RELEASE/reference/html/command-index.html - Выборка семантика на уровне JPA; значение по умолчанию отсутствует)
Но я не могу найти пример этого, чтобы увидеть, нахожусь ли я на правильном пути или смоделировать мою "семантику извлечения" - какой бы она ни была. Другой возможностью может быть использование field list
определить класс, содержащий мой список выпадающих значений. Это имеет аналогичный модификатор --fetch
, но опять же я не могу найти никаких примеров.
Я очень признателен за помощь в ответе на мой основной вопрос выше.
СПАСИБО!
1 ответ
Параметр Fetch указывает, следует ли загружать ассоциацию лениво или загружать ее с нетерпением ( https://docs.oracle.com/javaee/6/api/javax/persistence/ManyToOne.html).
Возможно, ошибка в тестах может быть из-за того, что вы пытаетесь найти, создать, удалить или обновить элементы со связанными элементами, которых не существует. Проверьте это в первую очередь.
Вы можете увидеть пример приложения, созданного с помощью gvNIX (дистрибутив Spring Roo), который содержит отношения между некоторыми сущностями на https://github.com/DISID/gvnix-samples/blob/master/quickstart-app/quickstart.roo