Hibernate - Constraint Violation

4 respostas
remixlara

Galera, estou desenvolvendo um site de classificados e até pouco tempo estava funcionando, eu conseguia cadastrar uma categoria sem informar a categoria Pai da mesma.

a questão é que ele está acusando violação de foreign key

Hibernate: insert into categoria (categoria_id, descricao, nome) values (?, ?, ?) //log do hibernate
05/02/2010 08:47:01 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet struts threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`classificado`.`categoria`, CONSTRAINT `FK5D54E133D5480FAC` FOREIGN KEY (`categoria_id`) REFERENCES `categoria` (`id`))
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.Util.getInstance(Util.java:381)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
	//... continuação da exception.. nada de importante depois daqui

sendo que não há violação, olhem o código:

@Entity
@Table(name = "categoria")
public class Categoria implements Serializable {

	@Id @GeneratedValue
	@Column(name = "id")
	private Integer id;
	
	@Column(name = "nome", length = 80, nullable = false)
	private String nome;
	
	@Column(name = "descricao", length = 150, nullable=true)
	private String descricao;
	
        // A questão é que tanto nessa parte quanto no banco essa foreign key pode ser null (categoria_id)
        // essa categoria representa a categoria pai dessa categoria
	@ManyToOne(cascade = {CascadeType.ALL})
	@JoinColumn(name = "categoria_id", nullable=true)
	private Categoria categoriaPai;
	
	@OneToMany(mappedBy = "categoriaPai", fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<Categoria> subCategorias;

	// ... getters and setters
}

desde já agradeço a ajuda de todos.

4 Respostas

xjunior

Não deve existir categoriapai ou vc tá inserindo uma categoriapai incorreta

remixlara

Existe categoriapai no banco de dados e eu estou tentando inserir uma categoria sem categoriapai e ele deveria permitir pois categoriapai pode ser nulo
:?

remixlara

remixlara:
Existe categoriapai no banco de dados. Eu estou tentando inserir uma categoria sem categoriapai e ele deveria permitir pois categoriapai pode ser nulo
:?

remixlara

rpz, olha que estranho. eu percebi isso agora
eu estou inserindo uma categoria só que o erro de foregin key está dando na tabela classificado O.o
Hibernate: insert into categoria (categoria_id, descricao, nome) values (?, ?, ?)
Cannot add or update a child row: a foreign key constraint fails (classificado.categoria, CONSTRAINT FK5D54E133D5480FAC FOREIGN KEY (categoria_id) REFERENCES categoria (id))

Quem entende isso? O.o

O mapeamento está certo, já revisei umas 300 vezes.

Criado 5 de fevereiro de 2010
Ultima resposta 8 de fev. de 2010
Respostas 4
Participantes 2