JPA - привязать энтиты через первичный ключ - ошибка ORA неверного идентификатора - PullRequest
0 голосов
/ 27 сентября 2018

В моей базе данных есть следующие две таблицы:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...