2012-11-13 28 views
1

我正在将应用程序从Grails 1.3.6升级到2.1.1。打了什么似乎是一个很奇怪的问题。Grails get()生成不完整的SQL

我有一个名为SECTION的表。这一呼吁:

def testSection = Section.get(94725) 

生成此SQL Grails的1.3.6:

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=? 

但这SQL 2.1.1:

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' 
        ... 
    } 
} 

有问题的数据库字段是:TYPE_ID CHAR(1),但由于SQL是因为get()而产生的,我假设它是没有任何关系的实际DB架构或列(?)。

事实上,它是选择字段列表中的最后一个元素,这让我觉得它在某种程度上是相关的,但我不知道如何改变它,或者如果这样做会从语句中'删除'另一个字段。

任何人都看过类似的东西?

干杯, spacebot

+0

啊 - 该属性已在类中重写的二传手,也是这样做的唯一的一个。我认为这必须以某种方式相关。 'public void setSectionType(type){....}' – spacebot

+0

YES!如果我删除重写的setter(),我得到这个SQL: '... section0_.TYPE_ID作为TYPE10_47_0 _,....' - 所以任何人都可以解释为什么会发生这种情况,还是它应该在Grails jira上提出的错误? – spacebot

回答

0

也许有点草率认为这可能是一个错误。

Grails2.1.1需要重写setter的参数类型,它在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