2011-04-04 58 views
3

我有表mwallet_terminal_store_mapping其中tid(character varing)是主鍵和外鍵引用terminal_master中的列tid。 在terminal_master中,tid(這是字符變化)是唯一鍵。其PK ID很長。獨特的字段上的外鍵沒有得到的數據

現在我有第一個表mapping_details的DTO,它定義如下。

private TerminalMaster terminalMaster; 

    @OneToOne 
@JoinColumn(name="pine_tid", referencedColumnName = "tid") 
public TerminalMaster getTerminalMaster() { 
    return terminalMaster; 
} 

public void setTerminalMaster(TerminalMaster terminalMaster) { 
    this.terminalMaster = terminalMaster; 
} 

模式第一個表:

CREATE TABLE mwallet_terminal_store_mapping 
(
pine_tid character varying(8) NOT NULL, 
pine_sid bigint NOT NULL, 
pine_mid text NOT NULL, 
fis_tid text NOT NULL, 
fis_sid text NOT NULL, 
fis_mid text NOT NULL, 
date_created timestamp without time zone, 
date_modified timestamp without time zone, 
created_by text, 
modified_by text, 
status text, 
rfu1 text, 
rfu2 text, 
rfu3 text, 
rfu4 text, 
rfu5 text, 
CONSTRAINT mwallet_terminal_store_mapping_pkey PRIMARY KEY (pine_tid), 
CONSTRAINT fk_mwallet_terminal_store_mapping_pinesid FOREIGN KEY (pine_sid) 
    REFERENCES store_master (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_mwallet_terminal_store_mapping_pinetid FOREIGN KEY (pine_tid) 
    REFERENCES terminal_master (tid) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION 
    ) 

架構第二個表格:

CREATE TABLE terminal_master 
(
id bigint NOT NULL DEFAULT nextval('terminal_master_seq'::regclass), 
tid character varying(8), 
store_master_id bigint, 
status integer, 
inserted_on timestamp without time zone, 
modified_on timestamp without time zone, 
offline_floor_limit character varying(20), 
enable_redeem integer DEFAULT 1, 
enable_load_activate integer DEFAULT 1, 
enable_offline integer DEFAULT 1, 
enable_balance_enquiry integer DEFAULT 1, 
enable_format_validation integer DEFAULT 1, 
enable_category_validation integer DEFAULT 1, 
enable_category_popup integer DEFAULT 1, 
enable_prepaid_load integer DEFAULT 1, 
enable_prepaid_reload integer DEFAULT 1, 
rfu1 character varying(20), 
rfu2 character varying(20), 
rfu3 character varying(20), 
block_status integer DEFAULT 0, 
enable_gf_redeem integer DEFAULT 0, 
externalid character varying(15), 
fis_tid text, 
licence_id text, 
CONSTRAINT terminal_master_pkey PRIMARY KEY (id), 
CONSTRAINT fk_terminal_master_1 FOREIGN KEY (store_master_id) 
    REFERENCES store_master (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT uq_terminal_master_1 UNIQUE (tid) 
) 

現在的問題是,當我試圖在第一個表的基礎上進行搜索

它說SQLGrammer異常,因爲操作符不存在:character varing = bigint。

這意味着它仍然試圖比較我的字符串與terminal_master的主鍵, 而不是我所指定的tid。

請說明。

+0

您能否顯示模式的相關部分,因爲您的解釋不是很清楚。 – axtavt 2011-04-04 13:41:26

+0

列'pine_tid'是什麼類型? – Thomas 2011-04-04 13:43:58

+0

我編輯過,Pine_tid是字符不同的字符。我猜DTO中的映射需要一些更改。 – coder 2011-04-04 13:51:58

回答

0

這裏TerminalMaster實體有「ID」是主鍵,所以你的映射會是這樣


    private TerminalMaster terminalMaster; 

    @OneToOne 
@JoinColumn(name="pine_tid", referencedColumnName = "id") 
public TerminalMaster getTerminalMaster() { 
    return terminalMaster; 
} 

public void setTerminalMaster(TerminalMaster terminalMaster) { 
    this.terminalMaster = terminalMaster; 
} 
 

唯一約束將不會是一個參考列名。

+0

但它沒有映射到id(主鍵)它映射到tid(唯一鍵)。看看桌子。 – coder 2011-04-08 07:58:33