0

我的应用程序中很少有域类,例如客户和租户。客户域实例具有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
4

0 回答 0