我的应用程序中很少有域类,例如客户和租户。客户域实例具有tenantId 引用,但与租户域类没有关联。
@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”来获取客户。用户登录后,tenantId 值存储在会话中。因此 OrderController 中的tenantId 值是从会话中获取并传递给“getClerkCustomer”
Customer getClerkCustomer(Long tenantId) {
Customer customer = Customer.findByTypeAndTenantId(CUSTOMER_TYPE_CLERK, Math.toIntExact(tenantId))
return (customer)
}
执行“getClerkCustomer”时,它会根据类型和租户 ID 检索客户。除了获取客户记录外,它甚至还会更新该tenantId 的租户记录(版本值增加)。我不确定为什么在我们获取客户记录时租户记录版本会增加。Grails 是否有任何按名称更新记录的习惯?
谁能让我知道为什么要为客户获取更新租户,我该如何避免这种情况?
注意:我们在其他域实例中也遇到了这个问题。更新一次实例会增加不同实例上的版本。以上就是这样一种情况。
Version of Grails is 3.0.9
Datbase is postgres