0

アプリケーションには、Customer や Tenant などのドメイン クラスがほとんどありません。顧客ドメイン インスタンスには 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 で Customer のタイプを取得しようとしています。複数のメソッドで使用されるため、Customer をフェッチするサービス メソッド「getClerkCustomer」を作成しました。ユーザーがログインすると、tenantId の値がセッションに保存されます。したがって、OrderController の tenantId 値はセッションから取得され、「getClerkCustomer」に渡されます。

Customer getClerkCustomer(Long tenantId) {

    Customer customer = Customer.findByTypeAndTenantId(CUSTOMER_TYPE_CLERK, Math.toIntExact(tenantId))

    return (customer)
}

「getClerkCustomer」が実行されると、タイプとテナント ID に基づいて顧客が取得されます。Customer レコードをフェッチするだけでなく、tenantId の Tenant レコードも更新します (バージョン値がインクリメントされます)。Customer レコードをフェッチするときに Tenant レコードのバージョンが増加する理由がわかりません。Grails には、名前でレコードを更新するための何らかの意図がありますか?

テナントが顧客フェッチ用に更新される理由と、それを回避する方法を誰か教えてもらえますか?

注 : この問題は、他のドメイン インスタンスでも発生します。一度インスタンスを更新すると、別のインスタンスのバージョンがインクリメントされます。上記はそのようなシナリオの 1 つです。

Version of Grails is 3.0.9
Datbase is postgres
4

0 に答える 0