1

アプリを Grails 1.3.6 から 2.1.1 にアップグレードしています。非常に奇妙な問題と思われるものにぶつかりました。

SECTION というテーブルがあります。この呼び出し:

def testSection = Section.get(94725)

Grails 1.3.6 で次の SQL を生成します。

select
    section0_.ID as ID42_0_,
    section0_.concept_tag_uri as concept2_42_0_,
    section0_.INDEX_ID as INDEX3_42_0_,
    section0_.LIVE_IND as LIVE4_42_0_,
    section0_.NAME as NAME42_0_,
    section0_.PARENT_ID as PARENT6_42_0_,
    section0_.ASST_INDEX_ASSET_ID as ASST7_42_0_,
    section0_.ORDER_NO as ORDER8_42_0_,
    section0_.SITE_ID as SITE9_42_0_,
    section0_.TYPE_ID as TYPE10_42_0_,

    (SELECT
        uk_sec.id 
    FROM
        section uk_sec,
        site uk_site 
    WHERE
        uk_sec.index_id = section0_.index_id 
        AND uk_sec.site_id = uk_site.siteid 
        AND uk_site.audienceid  = 1) as formula1_0_ 
from
    SECTION section0_ 
where
    section0_.ID=?

しかし、2.1.1 のこの SQL:

select 
    section0_.ID as ID45_0_, 
    section0_.concept_tag_uri as concept2_45_0_, 
    section0_.INDEX_ID as INDEX3_45_0_, 
    section0_.LIVE_IND as LIVE4_45_0_, 
    section0_.NAME as NAME45_0_, 
    section0_.PARENT_ID as PARENT6_45_0_, 
    section0_.ASST_INDEX_ASSET_ID as ASST7_45_0_, 
    section0_.ORDER_NO as ORDER8_45_0_, 
    section0_.SITE_ID as SITE9_45_0_, 

    (SELECT 
        uk_sec.id 
    FROM section uk_sec, 
        site uk_site 
    WHERE uk_sec.index_id = section0_.index_id 
        AND uk_sec.site_id = uk_site.siteid 
        AND uk_site.audienceid  = 1) as formula1_0_ 
from 
    SECTION section0_ where section0_.ID=?

似ていますが、この部分は 2.1.1 バージョンにはありません。

section0_.TYPE_ID as TYPE10_42_0_,

これはクラスのマッピングです:

...
String sectionType
...
static mapping = 
{
    table 'SECTION'
    version false
    id generator:'assigned'

    columns {
                    ...
        sectionType  column: 'TYPE_ID'
                    ...
    }
}

問題の DB フィールドは TYPE_ID CHAR(1) ですが、get() の結果として SQL が生成されるため、実際の DB スキーマまたは列 (?) とは何の関係もないと想定しています。

それが選択フィールドのリストの最後の要素であるという事実は、それが何らかの形で関連していると思わせますが、それを変更する方法がわかりません.

このようなものを見た人はいますか?

乾杯、スペースボット

4

1 に答える 1

0

多分それがバグかもしれないと考えるのはやや性急です。

オーバーライドされたセッターのパラメーター型は Grails2.1.1 で必須ですが、1.x ではより寛容です。

public void setType(type) { ... }  // works in 1.3.6, breaks 2.1.1

public void setType(String type) { ... }  // ok in 2.1.1
于 2012-11-14T12:28:01.330 に答える