Se citi la colonna id
durante la creazione di OTHERTABLE
usando le virgolette ("id"
), quindi devi citarlo anche quando crei il vincolo di integrità referenziale e quando esegui query sui dati. Fondamentalmente, devi citarlo ogni volta. Suggerisco di non citalo quando crei la tabella, perché in questo modo non devi citarlo in seguito. Citando significa che l'identificatore fa distinzione tra maiuscole e minuscole. Per MySQL, funziona perché internamente MySQL converte gli identificatori senza virgolette in minuscolo, a differenza di altri database. Ma per H2 e altri database non funziona.
Le due istruzioni seguenti funzionano sia per MySQL che per H2:
CREATE TABLE IF NOT EXISTS OTHERTABLE (
id BIGINT AUTO_INCREMENT NOT NULL
);
CREATE TABLE IF NOT EXISTS SOMETABLE (
id BIGINT AUTO_INCREMENT NOT NULL,
FOREIGN KEY (id) REFERENCES OTHERTABLE(id)
);
Quindi, se hai ottenuto un'eccezione nella seconda istruzione, molto probabilmente hai utilizzato un modo diverso per creare la prima tabella (OTHERTABLE
). Ed è qui che sta il problema.
La prossima volta, se fai una domanda, includi anche il create table
istruzione della prima tabella e pubblica il completo messaggio di errore.