Как предотвратить обновление записи в сервисном методе Grails3 для получения
В нашем приложении есть несколько классов доменов, таких как Клиент и Арендатор. Экземпляр домена клиента имеет ссылку на tenantId, но нет связи с классом домена Tenant.
@ToString(includeNames = true, includeFields = true, excludes = 'dateCreated,lastUpdated,metaClass')
@EqualsAndHashCode
class Customer {
Integer id
Integer tenantId
Long version
String type
Date dateCreated
Date lastUpdated
static mapping = {
table "customer"
id column: "customerid", generator:'native', params:[sequence:'customer_customerid_seq']
tenantId column:"tenantid"
version column: "version"
dateCreated column:"datecreated"
lastUpdated column:"lastupdated"
}
}
@ToString(includeNames = true, includeFields = true, excludes = 'dateCreated,lastUpdated,metaClass')
@EqualsAndHashCode
class Tenant {
Long id
String name
Long version
static mapping = {
table "tenant"
id column: "tenantid"
}
}
Мы пытаемся получить тип клиента в OrderController. Так как он используется в нескольких методах, я создал сервисный метод 'getClerkCustomer' для выборки Customer. Значение tenantId сохраняется в сеансе после входа пользователя в систему. Таким образом, значение tenantId в OrderController выбирается из сеанса и передается в 'getClerkCustomer'
Customer getClerkCustomer(Long tenantId) {
Customer customer = Customer.findByTypeAndTenantId(CUSTOMER_TYPE_CLERK, Math.toIntExact(tenantId))
return (customer)
}
Когда выполняется getClerkCustomer, он запрашивает Customer на основе типа и tenantId. Наряду с извлечением записи о клиенте она даже обновляет запись об арендаторе для этого tenantId (значение версии увеличивается). Я не уверен, почему версия записи об арендаторе увеличивается, когда мы получаем запись о клиенте. Есть ли у Grails какое-либо правило обновлять запись по имени?
Может кто-нибудь сообщить мне, почему Арендатор обновляется для получения от Клиента и как мне этого избежать?
Примечание. Эта проблема встречается и с другими экземплярами домена. Обновление одного экземпляра увеличивает версию на другом экземпляре. Выше один такой сценарий.
Version of Grails is 3.0.9
Datbase is postgres