В моей базе данных есть следующие две таблицы:
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 на самом деле является длинным значением) помечено какОбъект учетной записи.
Позже, когда у меня уже есть объект учетной записи, я хочу также создать объект mobileInstance с идентификатором соответствующей учетной записи.
Но когда я звоню:
mobileInstance.setAccountId
он требует параметр учетной записи ... Когда я назначаю ему один и пытаюсь сохранить его в БД, я получаю ошибку:
ERROR SqlExceptionHelper:131 - ORA-00904: "APPLICATION_ID": invalid identifier
Я предполагаю, что это потому, чтоПоле идентификатора приложения в базе данных является числовым полем, иЯ назначаю ему целый объект Account, который я не хочу менять на Long ..
Есть ли способ распознавания кода, который использует только первичный ключ моей таблицы Account?