Duplicate entry '1-1' for key 'PRIMARY' como contornar esse erro?

3 respostas
U

Esse erro, na qual diz que to duplicando a chave primária tá ocorrendo na seguinte situação:

FILME_GENERO foi uma tabela criada pelo JPA quando defini ManyToMany em duas entidades. FILME e GENERO.
Na hora de cadastrar um filme com seus respectivos generos. o log mostra esse erro:

Error Code: 1062
Call: INSERT INTO FILME_GENERO (generos_ID, filmes_ID) VALUES (?, ?)
bind => [2 parameters bound]
Query: DataModifyQuery(name="generos" sql="INSERT INTO FILME_GENERO (generos_ID, filmes_ID) VALUES (?, ?)")

O que pude entender é que generos_id e filmes_id da tabela filme_genero são chaves primárias, aí o que tá complicando é que generos_ID = 1 e filmes_ID = 1. daí o 1-1.

Como contorno esse problema de duas chaves primárias na mesma tabela? Lembrando que essa tabela é criada sozinha, tem que mexer em filme ou em genero, mas não sei o que modificar.

@Entity
public class Genero implements Serializable {
	@Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@ManyToMany(mappedBy = "generos", cascade= CascadeType.ALL)
	private List<Filme> filmes;
...

}

@Entity
public class Filme implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@ManyToMany(cascade = CascadeType.ALL)
	private List<Genero> generos;
...

}

Me apeguei ao fato de Filme ter vários generos, genero tá em vários filmes =P Essas duas entidades geram FILME_GENERO com duas chaves primárias... enfim se alguém souber arrumar esse relacionamento zuado que fiz...

3 Respostas

U

Dae… achei uma solução (ainda não testei) que acho que vai funcionar. Eu preciso desalinhar as primary keys. por exemplo:

pk1 = 1
pk2 = 100

aí ambas vão aumentando sem crise hehe. Vou tentar aqui

leoramos

Eu tiraria o Cascade de Gênero. Tu quer mesmo que, ao apagar um gênero, todos os filmes dele sejam apagados?

raphael.ricci
unkillable:
Esse erro, na qual diz que to duplicando a chave primária tá ocorrendo na seguinte situação:

FILME_GENERO foi uma tabela criada pelo JPA quando defini ManyToMany em duas entidades. FILME e GENERO.
Na hora de cadastrar um filme com seus respectivos generos. o log mostra esse erro:

Error Code: 1062
Call: INSERT INTO FILME_GENERO (generos_ID, filmes_ID) VALUES (?, ?)
bind => [2 parameters bound]
Query: DataModifyQuery(name="generos" sql="INSERT INTO FILME_GENERO (generos_ID, filmes_ID) VALUES (?, ?)")

O que pude entender é que generos_id e filmes_id da tabela filme_genero são chaves primárias, aí o que tá complicando é que generos_ID = 1 e filmes_ID = 1. daí o 1-1.

Como contorno esse problema de duas chaves primárias na mesma tabela? Lembrando que essa tabela é criada sozinha, tem que mexer em filme ou em genero, mas não sei o que modificar.

@Entity
public class Genero implements Serializable {
	@Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@ManyToMany(mappedBy = "generos", cascade= CascadeType.ALL)
	private List<Filme> filmes;
...

}

@Entity
public class Filme implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@ManyToMany(cascade = CascadeType.ALL)
	private List<Genero> generos;
...

}

Me apeguei ao fato de Filme ter vários generos, genero tá em vários filmes =P Essas duas entidades geram FILME_GENERO com duas chaves primárias... enfim se alguém souber arrumar esse relacionamento zuado que fiz...

Cara na verdade você precisa de uma tabela associativa entre as tabelas, que vai conter a PK de gênero e de filme algo mais ou menos assim:

@ManyToMany(fcascade = CascadeType.ALL) 
	@JoinTable(name="GENERO_FILME",
			joinColumns=@JoinColumn(name="PK_FILME(ou o nome da FK de sua table)"), 
			inverseJoinColumns=@JoinColumn(name="PK_GENERO")) 
	private List<Genero> generos;

creio que assim, você já vai conseguir fazer.

Qualquer coisa estamos aí. :lol:

Criado 9 de outubro de 2012
Ultima resposta 9 de out. de 2012
Respostas 3
Participantes 3