GenerationType para multiplos banco de dados

6 respostas
D

Olá,
Estou desenvolvemendo uma aplicação utilziando Hibernate/JPA + Spring + Flex e estou tendo problema em definir o GenerationType das PK.

Como estou fazendo a aplicação para não depender de banco de dados, ao definir GenerationType.AUTO (não sou experiente, acredito que ele pegaria o auto incremento ou identity ou sequence pelo banco de dados).

Ao testar com Postgresql ele informa emite um erro:

Caused by: org.postgresql.util.PSQLException: ERROR: relation "public.hibernate_sequence" does not exist
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:205)
	at org.hibernate.id.SequenceGenerator.generateHolder(SequenceGenerator.java:112)
	... 94 more

Verificando nos tópicos relacionados, parece que preciso informa qual a sequencia ele deve seguir (que para mim deveria ser AUTO)

Acredito se eu testar com o SQLSERVER deve aparecer outro erro.

Como posso definir para que as minhas classes de persistencias saiba o modo de geração de key?
Ou eu tenho que ter uma classe de persistencia para cada tipo de banco de dados (Classes especificas para postgres, mysql, sqlserver, …)?

OBS.:
Não estou querendo a correção para esse erro, pois já encontrei aqui no forum. A dúvida, tem como fazer classes persistentes genericas para qualquer banco de dados?.

6 Respostas

Hebert_Coelho

Nesse post aqui eu falo sobre isso: SequenceGenerator.

Espero que possa te ajudar.

D

jakefrog:
Nesse post aqui eu falo sobre isso: SequenceGenerator.

Espero que possa te ajudar.

Isso ajudou muito, porem não resolve o meu problema.
Essa solução é apenas para banco de dados que usa sequencia. No caso de SQLSERVER e MySQL não resolveria.

Preciso de algo para todos eles, por enquanto isso ira quebrar meu galho no desenvolvimento. Já na produção tenho que ter uma solução.

EDIT
posso estar falando besteira, por ser novo nesse ramo, ainda estou aprendendo. :smiley:

Hebert_Coelho

Sem problema, então retira a declaração que fica em cima da classe.

E no ID coloque geração AUTO. [=

D

Porem já esta…

@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="pasta_cd", unique=true, nullable=false)
	private Integer pastaCd;

e ao tentar salvar apresenta o erro do primeiro post.

Hebert_Coelho

A sim, a sequence existe no postgres? ela ta criada?

Caso não esteja, coloque no seu persistence para ela atualizar o banco com update que o JPA irá criar tudo automático.

D

Já existe, porem vou fazer isso e testar e vejo o resultado.

EDIT
Não resolveu, ele criou o hibernate_sequence, em vez de utilizar o que já existe na tabela, assim gerando conflito de key.

Criado 7 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 6
Participantes 2