Лучший способ создать домен с константой в граалях
У меня есть много классов домена в моем проекте. У многих из них есть тип столбца. Например: User
стол имеет userType
колонка, Book
стол имеет bookType
колонка. Я часто передаю эти типы в GSP g:select
источник по телефону BookType.list()
метод. Но проблема в том, что GSP содержит много g:select
тогда я должен выполнить много лишних запросов.
И еще одна проблема, когда я создаю новый экземпляр домена, я должен получить эти типы констант из БД следующим образом
Book book = new Book();
book.bookType = BookType.findByName(BookTypes.COMICS);
Здесь у меня тоже есть такая же проблема, я должен выполнить лишний запрос. Есть ли хороший дизайн, чтобы делать все эти вещи без выполнения этих избыточных запросов?
1 ответ
Если types
не очень неустойчивы, я предполагаю, что это так, потому что я вижу, что вы определили enum
для типа. Попробуйте использовать enum
полностью - я имею в виду, вообще не беспокойтесь о таблице базы данных, чтобы подтвердить это. Например,
enum SomeType {
TYPE1(1, "Type 1"),
TYPE2(2, "Type 2"),
TYPE3(3, "Type 3")
final int id
final String value
private SomeType(int id, String value) {
this.id = id
this.value = value
}
// Might be needed for <g:select> tags, I'm not very sure
int getKey() { id }
static SomeType byId(int id) {
values().find { it.id == id }
}
}
Затем в вашем домене сделайте что-то вроде
class SomeDomain {
static constraints = {
...
type nullable: false
...
}
...
SomeType type
}
Затем вы можете просто сделать что-то вроде этого,
SomeDomain book = new SomeDomain(..., type: SomeType.TYPE1, ...);