HIbernate - Constraint Violation
09/02/2010
0
Galera, estou desenvolvendo um site de classificados só que não estou conseguindo cadastrar uma categoria sem informar a categoria Pai da mesma.
a questão é que ele está acusando violação de foreign key e ainda por cima na tabela de classificado O.o???? como pode isso?
Cannot add or update a child row: a foreign key constraint fails (`classificado`.`categoria`, CONSTRAINT `FK5D54E133D5480FAC` FOREIGN KEY (`categoria_id`) REFERENCES `categoria` (`id`))
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
@JoinColumn(name = "categoria_id", nullable=true)
private Categoria categoriaPai;
@OneToMany(mappedBy = "categoriaPai", fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private List subCategorias;
// ... getters and setters
}
desde já agradeço a ajuda de todos.
a questão é que ele está acusando violação de foreign key e ainda por cima na tabela de classificado O.o???? como pode isso?
Cannot add or update a child row: a foreign key constraint fails (`classificado`.`categoria`, CONSTRAINT `FK5D54E133D5480FAC` FOREIGN KEY (`categoria_id`) REFERENCES `categoria` (`id`))
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
@JoinColumn(name = "categoria_id", nullable=true)
private Categoria categoriaPai;
@OneToMany(mappedBy = "categoriaPai", fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private List subCategorias;
// ... getters and setters
}
desde já agradeço a ajuda de todos.
Lucas Monteiro
Curtir tópico
+ 0
Responder
Posts
12/02/2010
Dyego Carmo
Você esta inserindo um classificado sem nenhuma categoria assossiada (ou vice vers) é um erro no BANCO DE DADOS devido a uma FOREIGN KEY criada ,
Ou voce retira ela , ou adiciona antes o "PAI" para depois adicionar o registro "FILHO"
Ou voce retira ela , ou adiciona antes o "PAI" para depois adicionar o registro "FILHO"
Responder
20/02/2010
Camilo Lopes
bem se for usar FK com mysql precisar ter um indice antes para cada FK. E primeiro tem que criar os indices, aplicar e depois criar os FK. Tive esse problema semana passada tb.
Eu recomendo fazer o FK usando workbench, mysql maestro etc. Eu so conseguir resolver meu problema e entender o porque quando modelei.
Eu recomendo fazer o FK usando workbench, mysql maestro etc. Eu so conseguir resolver meu problema e entender o porque quando modelei.
Responder
Clique aqui para fazer login e interagir na Comunidade :)