Я 2 месяца в разработке Grails и наткнулся на эту проблему, на которую я не могу найти ответ, воспользовавшись книгами, сайтом Grails и поиском по форуму. Я надеюсь, что кто-то может мне помочь.
У меня есть 2 класса домена - AccountPackage и AccountPackageFeatures. Идея состоит в том, что AccountPackage (например, Gold Account) может иметь много функций. Для представления этого в домене AccountPackage есть встроенный список AccountPackageFeatures. Вот два класса домена:
AccountPackage
class AccountPackage {
String name // eg. Gold Account
boolean active // eg. true - account is active
List features = []
static hasMany = [features:AccountPackageFeature]
static constraints = { }
}
AccountPackageFeature
class AccountPackageFeature {
String featureName // eg. "Number of posts allowed"
String featureCategory // eg. "Job Posting"
String value // eg. "10"
static constraints = { }
}
Данные уже сохранены в базе данных. В моем коде я получил конкретный экземпляр AccountPackage, и теперь я хочу найти определенную функцию этого AccountPackage. Я делаю это, чтобы получить список функций из экземпляра AccountPackage, а затем перебирать список, пока не найду интересующую меня функцию. Фрагмент кода ниже:
def desiredFeature = null
def desiredFeatureId = 10
AccountPackage pkg = AccountPackage.findByName("Gold Account")
def features = pkg.getFeatures()
for (feature in features) {
if (feature.id == desiredFeatureId) {
desiredFeature = feature
}
}
Я знаю, что это довольно неэффективно ... но какое право делать это в Grails ??
Предоставляет ли Grails / GORM какие-либо встроенные функции, чтобы избавить меня от выполнения пользовательского запроса? В качестве альтернативы я должен, например, добавить пользовательский метод в мой объект домена AccountPackage, который называется что-то вроде getFeatureWithId, который принимает идентификатор, а затем выполняет пользовательский запрос для возврата требуемой функции?
Буду очень признателен за любой совет относительно наилучшей практики / правильного способа сделать это.