java - 无法从唯一字段的外键表中获取数据

标签 java hibernate jpa

我有表mwallet_terminal_store_mapping,其中tid(字符变量)是主键,外键引用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)
)

现在的问题是,当我尝试根据 tid 在第一个表中执行搜索时,

它显示 SQLGrammer 异常,因为运算符不存在:character varing = bigint。

这意味着它仍在尝试将我的字符串与terminal_master的主键进行比较, 没有提到我提到的内容。

请澄清一下。

最佳答案

这里 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;
} 

唯一约束不会是引用列名称。

关于java - 无法从唯一字段的外键表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5539253/

相关文章:

Java:如何使 JSpinner 显示具有一定偏移量的值

java - 如何打印整个字符串而不仅仅是单个字符?

java - 为什么在 spring data jpa starter 中 javax.persistence-api 被 jakarta.persistence-api 替换?

java - Spring in Action 第 6 章,项目未启动

java - Spring Data JPA获取实体外键而不导致依赖实体延迟加载

java - 我可以强制 Maven 依赖项 A 使用特定版本的依赖项 B,同时使用不同版本的依赖项 B 吗?

java - 在 Android 上使用 root 调用 'ls' 不会返回任何内容,应用程序挂起

java - 为什么我的 EmbeddedId 在 hibernate 中不起作用?

java - 请求处理失败;嵌套异常是 org.hibernate.exception.ConstraintViolationException : Could not execute JDBC batch update

java - Hibernate集合在持久化后为NULL