Как использовать 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

Другие вопросы по тегам