JPA-通过主键绑定实体-无效的标识符ORA错误

时间:2018-09-27 12:08:27

标签: java hibernate jpa jpql jpa-2.1

我的数据库中有以下两个表:

CREATE TABLE ACCOUNT (
    ID NUMBER(19, 0) NOT NULL,
    AA_ID VARCHAR2(11 CHAR),
    BB_ID VARCHAR2(8 CHAR),
    STATUS NUMBER(1, 0) DEFAULT 1,
    CREATED_AT TIMESTAMP(6) NOT NULL,
    LAST_MODIFIED_AT TIMESTAMP(6)
) TABLESPACE $tbsp;

CREATE TABLE MOBILE_INSTANCE (
    ID NUMBER(19, 0) NOT NULL,
    ACCOUNT_ID NUMBER(19, 0) NOT NULL,
    APPLICATION_ID VARCHAR2(36 CHAR) NOT NULL,
    TOKEN VARCHAR2(255 CHAR) NOT NULL,
    DEVICE VARCHAR2(13 CHAR),
    STATUS VARCHAR2(10 CHAR),
    CREATED_AT TIMESTAMP(6) NOT NULL,
    LAST_MODIFIED_AT TIMESTAMP(6)
) TABLESPACE $tbsp;

以及它们之间的联系:

ALTER TABLE MOBILEBANK_INSTANCE ADD CONSTRAINT FK_MOBILEBANKINSTANCE_ACCOUNT FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID);

到目前为止,它的工作原理就像是一种魅力……

通过JPA,我已经为这些表创建了实体-请查看我的实体的以下代码段:

在MobileInstance实体中,我已将@ManyToOne连接标记如下:

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ACCOUNT_ID")
    private Account accountId;

这是我的Account实体类中的样子:

@OneToMany(mappedBy = "accountId", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<MobileInstance> mobileInstanceList = new ArrayList<>();

如您所见,accountId字段(在Account表中实际上是Long值)被标记为Account对象。

稍后,当我已经有一个帐户对象时,我也希望创建一个具有适当帐户ID的mobileInstance对象。

但是当我打电话时:

mobileInstance.setAccountId

它需要一个帐户参数...当我给它分配一个参数并尝试将其保存在数据库中时,出现错误:

ERROR SqlExceptionHelper:131 - ORA-00904: "APPLICATION_ID": invalid identifier

我认为,这是因为数据库中的“应用程序ID”字段是“数字”字段,并且我为其分配了一个完整的Account对象,但我不想将其更改为Long。

有没有一种方法可以识别仅使用我的帐户表的主键的代码?

0 个答案:

没有答案