Hibernate tratando todas as PKs como a mesma!

5 respostas
kyuri

Boa Noite!

Estou desenvolvendo uma aplicação com Hibernate e Postgree, e percebi que ao salvar os registros o hibernate está tratando os index das tabelas como um só!
Cada tabela tem seu campo id, mas na hora de numerar o hibernate segue o seguinte:

Inseri na tabela x id=1
Inseri na tabela x id=2
Inseri na tabela y id=3
Inseri na tabela x id=4

Enquanto cada tabela deveria ter uma contagem própria:

Inseri na tabela x id=1
Inseri na tabela x id=2
Inseri na tabela y id=1
Inseri na tabela x id=3

Alguém tem idéia do que pode ser? :roll:

5 Respostas

fiaux

Mostre como configurou a geração do id no banco e no hibernate.

kyuri

Olha.. eu não configurei em lugar algum. Pensei que fosse algo default.. :roll:

Minhas tabelas seguem o padrão:

@Entity
public class Usuario {

	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String senha;
	private String email;

...
@Entity
public class Categoria {
	
	@Id
	@GeneratedValue
	private Long id;
	private String descricao;

...

Então devo especificar mais coisas ali no @Id ou no @GeneratedValue?

qmx

Você deve ter associado o mesmo nome de sequence em @GeneratedValue, ou pior, colocado a anotação em uma superclasse mapeada, o que realmente faria todo mundo usar a mesma sequence.

kyuri

Alterei minhas classes para o seguinte:

@SequenceGenerator(name="seq", sequenceName="usuario_seq")

@Entity
public class Usuario {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="seq")
	private Long id;
	private String nome;
	private String senha;
	private String email;

...

Mas agora a seguinte exception ocorre quando vou fazer um insert:

exception

javax.servlet.ServletException: could not get next sequence value
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:75)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

org.postgresql.util.PSQLException: ERROR: relation "subcategoria_seq" does not exist
	org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
	org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
...
kyuri

Consegui!

Tive que apenas recriar o banco com as configurações novas do hibernate. :wink:

Criado 21 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 5
Participantes 3