2016-04-30 81 views
0

get函数我得到的StringIndexOutOfBoundsException当我尝试在GORM使用get函数来获取域类对象。的StringIndexOutOfBoundsException在格姆

域类

class Connect { 
    int id 
    long profileid 
    String username 
    char type 
    char superSub 
    String time 
    char class_ 
    boolean isapilogin 

    static mapping = { 
     table "CONNECT" 
     version false 
     id column: "ID" 
     profileid column: "PROFILEID" 
     username column: "USERNAME" 
     type column: "TYPE" 
     superSub column: "SUPER_SUB" 
     time column: "TIME" 
     class_ column: "CLASS" 
     isapilogin column: "ISAPILOGIN" 

    } 

    static constraints = { 
     username maxSize: 40 
     type maxSize: 1 
     superSub maxSize: 1 
     time maxSize: 14 
     class_ maxSize: 1 
    } 
} 

MySQL数据库表

ID | int(10)unsigned
PROFILEID | bigint(20)unsigned USERNAME | varchar(40)
TYPE | char(1)
SUPER_SUB | char(1)
TIME | varchar(14)
CLASS | char(1)
ISAPILOGIN | TINYINT(1)

myController的

class DemoController { 
    def check() { 
     int id = 1001; 
     Connect data = Connect.get(id) // exception at this line 
     data.save() 
     render "check" 

    } 
} 

MySQL表DATA

ID简档| USERNAME | TYPE | SUPER_SUB | TIME | CLASS | ISAPILOGIN

1001 | 4 | ABHINAV | | P | 1461235989 | A | 0

1002 | 5 | GAVAN | S | P | 1450155084 | A | 1

当我调用ID 1001而不是ID 1002时,异常即将到来。我认为的原因是对于ID 1001,类型列具有空值或空间,但对于ID 1002类型具有char值'S'。在我的表中,我有很多空值的行,所以我可以做什么来避免这种异常?

回答

0

我认为你应该从域类中删除“id”域。

+0

这是为什么?ID是主键 –

+0

,因为GORM自己做它 –

+0

虽然在域中声明'id'是多余的,但删除它并不能解决此问题。 – Armaiti

0

请确保您在constraint子句中指示nullable的属性。你的情况属性superSub可以为空:

superSub nullable: true, maxSize: 1 

如果不指明约束子句为空的属性,明确的是,Grails期望这些值。

+0

superSub不能为空,我的所有列都不能为空,所以我在每列添加了nullable:false,但问题仍然存在。 –

+0

如果这是为什么superSub对记录1001没有任何价值? – Armaiti

+0

superSub的值为'P'。它是具有值空白的类型列“”。 –