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
bài viết giản đồ của các bảng. –
Bạn đang gặp phải lỗi gì? –
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 –