我的数据库中有以下两个表:
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。
有没有一种方法可以识别仅使用我的帐户表的主键的代码?