2013-08-14 40 views
5

Tôi đang cố gắng tạo một cặp đối tượng miền GORM với ánh xạ một-một với báo trước rằng khóa giữa hai bảng không phải là một dài, nhưng thay vào đó là một chuỗi/varchar UUID. Tôi đã xem xét tất cả các cuộc thảo luận về cách làm điều này trong grails/gorm, và tìm thấy một số câu hỏi, nhưng không có câu trả lời nào về sử dụng. Dưới đây là hai lớp học của tôi, tôi hy vọng một người nào đó có thể chỉ cho tôi một cách hợp lý.GORM: ánh xạ một bảng một bằng cách sử dụng chuỗi làm khóa

Cảm ơn.

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 
} 

... vì những lý do liên quan đến dữ liệu hiện có và bảng biểu, vv có bảng ItemLastChange sử dụng các item_id như FK không phải là một giải pháp khả thi (càng nhiều càng tốt tất cả chúng ta muốn nó là ...)

này kết quả trong các lỗi sau:

java.sql.SQLException: giá trị không hợp lệ cho getLong() - '6890daf634873fbaac307cad258561be'

Trường hợp giá trị '6890daf634873fbaac307cad258561be' là UUID varchar từ bảng ItemLastChange.

mỗi ý kiến ​​dưới đây, đây là một sơ đồ thô:

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 

Không có mối quan hệ FK định nghĩa giữa các bảng.

Xin cảm ơn trước.

-Steighton

+3

bài viết giản đồ của các bảng. –

+3

Bạn đang gặp phải lỗi gì? –

+0

Xin lỗi, đã thoát khỏi sự cố này trong một phút ... (và bằng cách nào đó không thấy câu trả lời của bạn ... dù sao đi nữa, lỗi tôi nhận được là: java.sql.SQLException: Giá trị không hợp lệ cho getLong() - '6890daf634873fbaac307cad258561be' Nó xuất hiện rằng kể từ khi mối quan hệ được xác định bởi một khóa varchar rằng hệ thống giả định rằng cột cho mối quan hệ * phải * là một dài –

Trả lời

0

Hãy thử khai báo id của bạn như là một String:

String id 

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

Tôi không thể thay đổi việc khai báo id của tôi thành String, nhưng tôi sẽ thử thay đổi cột ID từ cột dài sang cột uuid để xem nó có hoạt động hay không. –