2013-08-14 19 views
5

İki tablo arasındaki anahtarın bir uyarı olmadığı birebir eşleme ile bir çift GORM etki alanı nesnesi oluşturmaya çalışıyorum uzun, bunun yerine bir UUID dizgisi/varchar. Her şeyi, bu konuda nasıl görüştüğüme dair tartışmalar yaptım, birkaç soru buldum, fakat kullanımın cevabı yok. İşte benim iki sınıfım, umarım birisi bana makul bir yöne işaret edebilir.GORM: bir anahtar olarak dize kullanarak bire bir tablo eşleştirmesi

Teşekkürler. vb mevcut veri ve tablolar, ilgili nedenlerle

class ItemLastChange { 
    static belongsTo = [item: Item] 

    static mapping = { 
     cache true 
     version false 
     id column: 'item_hash_msb', name: 'itemHashMsb' 
     item column: 'item_uuid', key: 'uuid', sqlType: 'text', type: 'text', insertable: false, updateable: false 
    } 

    static constraints = { 
    } 

    long itemHashMsb; 
    String itemUuid; 
    String itemMapCode; 
    String dbActionType; 
    String version; 
    Calendar modificationDate; 
} 

class Item { 
    static hasOne = [itemLastChange: ItemLastChange] 

    static mapping = { 
     cache true 
     version false 
     id column:'item_id' 

     columns { 
      itemLastChange column: 'uuid', lazy: false, key: 'item_uuid', type: 'text', insertable: false, updateable: false 
     } 

    } 

    static constraints = { 
    } 

    ItemLastChange itemLastchange 

    long id 
    String uuid 
    //other fields eliminated 
} 

... FK yapılabilir bir çözüm değil olarak ItemLastChange tablo ITEM_ID kullanmak zorunda (hepimiz olsaydı olduğu kadar ...)

aşağıdaki hata

Bu sonuçlar:

java.sql.SQLException: getLong() için geçersiz değer - '6890daf634873fbaac307cad258561be'

nerede değeri '6890daf634873fbaac307cad258561be' ItemLastChange tablosundan varchar UUID var.

Item 
---- 
Field  Type *  Collation Null Key  
item_id  int(11)    NO PRI 
item_type_id int(11)  {null}  YES MUL 
organization_id int(11)  {null}  YES MUL 
item_map_code varchar(36) utf8_bin YES  
uuid  char(32) utf8_bin NO UNI 
name  varchar(64) utf8_bin NO  
... 

ItemLastChange 
-------------- 
Field  Type  Collation Null Key 
item_hash_msb bigint(20)   NO PRI 
item_uuid  varchar(32) utf8_bin NO UNI 
item_map_code varchar(36) utf8_bin NO 
db_action_type varchar(64) utf8_bin NO 
item_version varchar(16) utf8_bin NO 
description  longtext utf8_bin YES 
ine_app_version varchar(16) utf8_bin YES 
creation_date datetime   NO 
modification_date datetime   NO 

bu tablolar arasında hiçbir tanımlanmış FK ilişki vardır: Aşağıdaki yorumların Başına

, burada kaba bir şema var.

Şimdiden teşekkürler.

-Steighton

+3

Yayınla tablolarının şema. –

+3

Hangi hatayı alıyorsunuz? –

+0

Üzgünüz, bu konudan bir dakikalığına uzaklaştım ... (ve bir şekilde cevaplarını görmedim ... her nasılsa, aldığım hata: java.sql.SQLException: getLong için geçersiz değer() - '6890daf634873fbaac307cad258561be' İlişki bir varchar anahtarıyla tanımlandığından, sistemin * ilişkisinin * uzun olması gerektiğini varsayarak varsayıyorum. –

cevap

0

String olarak id bildirmeyi deneyin:

String id 

static mapping = { 
    [...] 
    id column:'item_id', generator: 'assigned' 
    [...] 
} 
+0

Kimlik numaramın Dize'ye bildirimini değiştiremiyorum, ancak çalışıp çalışmadığını görmek için Kimlik sütununu uuid sütununun uzunluğundan değiştirmeyi deneyeceğim. –

İlgili konular