Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

HHH000299: Could not complete schema update: org.hibernate.MappingException: org.hibernate.dialect.OracleDialect does not support identity key generation

Ao subir o servidor JBoss o seguinte error ocorre :

HHH000299: Could not complete schema update: org.hibernate.MappingException: org.hibernate.dialect.OracleDialect does not support identity key generation

6 respostas

Opa, vc precisa usa a estratégia sequence para gerar a chave primária.. não vai rolar o identity no oracle.

Olá, verifiquei que além da Sequence, eu precisaria criar uma Trigger, Correto ?

Porém para que eu crie uma Trigger, eu preciso saber os dados da tabela, como no exemplo:

-- Cria a Sequence dept_seq 
CREATE SEQUENCE dept_seq START WITH 1;

-- Cria a Trigger <dept_bir> para a Sequence <dept_seq>, 
CREATE OR REPLACE TRIGGER dept_bir 

-- Da tabela <departments> para a coluna <id>
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

Até então, para o exercício proposto, eu não sei qual tabela e colunas no ele está tentando criar, eu precisaria saber disso...

Porém, vem outra dúvida, quando eu subo o Servidor, eu vejo que o JPA tenta criar a tabela, caso eu crie e gera a Sequence e Trigger, ele não daria problema na hora de subir pois já existiria essa tabela na base ???

Não daria... Se tiver configurado pra create drop, ele tentaria dropar a tabela. E não sabia que precisaria dá trigger, coisa do Oracle? No pg tb eh com sequência e sem essa necessidade.

Pelo que eu entendi precisa da Trigger porque a Trigger que relaciona: Sequence à Tabela/Coluna que terá o auto complete, sem ela, acredito que não tem como o JPA saber que para aquela Tabela/Coluna existe uma Sequence criada.

Porém a dúvida é , como eu vou criar essa Trigger ? tenho a tabelas e colunas que o JPA está tentando criar ??

O que vc precisa saber é: o Oracle precisa de trigger pra incrementar a sequence? Eu acho que não. O hibernate pede o next pra sequence e já foi. Em relação as tabelas, eh só pedir pro hibernate não criar. Tem uma configuração chamada hbm2ddl.auto, procura ela e apaga.

solução!

Criando as anotations :

    @Id
    @SequenceGenerator( name="AUTOR_SEQUENCE_GENERATOR", sequenceName="SEQ_AUTOR_ID" )
    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="AUTOR_SEQUENCE_GENERATOR")

para cada um dos id's dos model's e criando as Sequence para cada anotation, funcionou