Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

erro quando clico no excluir

Bom estou tentando excluir um produto, mas me retorna um erro, alias me retornava outro erro, mais achei em forum no google uma solução mais agora me retorna outro erro.

@Table
@Entity
@NamedQueries({ @NamedQuery(name = "Produto.listaTodos", query = "Select p from Produto p join fetch p.fornecedores") })
public class Produto implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long codigo;

    @Column(length = 40, nullable = false)
    private String descricao;

    @Column
    private Integer quantidade;

    @Column
    private Double preco;

    @OneToMany(mappedBy = "produto")
    private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
@Table
@Entity
public class Fornecedor implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long codigo;

    @Column(length = 50, nullable = false)
    private String nome;

    @Column
    private String celular;

    @ManyToOne
    @JoinColumn(referencedColumnName = "produto_codigo", name = "codigo")
    private Produto produto = new Produto();

O erro antigamente era um outro, ai vi em forum e coloquei o meu joinCollumn porem o erro está nele mesmo. Esta retornando.

GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/tcc] threw exception [null] with root cause
org.hibernate.MappingException: Unable to find column with logical name: produto_codigo in org.hibernate.mapping.Table(Produto) and its related supertables and secondary tables
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:552)
    at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:257)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116)
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1525)
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1446)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1351)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at br.com.bercalini.dao.JPAUtil.<clinit>(JPAUtil.java:9)
    at br.com.bercalini.dao.ProdutoDao.listaProdutos(ProdutoDao.java:23)
    at br.com.bercalini.bean.ProdutoBean.getLstProdutos(ProdutoBean.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIData.getValue(UIData.java:732)
    at org.primefaces.component.api.UIData.getDataModel(UIData.java:764)
    at javax.faces.component.UIData.getRowCount(UIData.java:356)
    at org.primefaces.component.api.UIData.calculateFirst(UIData.java:215)
    at org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:117)
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:85)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:85)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
    at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:49)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

E quando tiro minha anotacao joinCollumn me retorna esse erro.

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`tcc`.`fornecedor`, CONSTRAINT `FKC4F07D85A0149504` FOREIGN KEY (`produto_codigo`) REFERENCES `produto` (`codigo`))
4 respostas

Olá Alisson !

Se não estou enganado essa exception ocorre porque você esta querendo deletar um produto que tem o fornecedor como chave estrangeira(foreign key), ou seja você tem que deletar primeiro o fornecedor relacionado com este produto para depois deletar o produto OU colocar no seu relacionamento @ManyToOne para fazer o servico para você desta forma:

@ManyToOne(cascade=CascadeType.REMOVE)
    @JoinColumn(referencedColumnName = "produto_codigo", name = "codigo")
    private Produto produto = new Produto();

Testa desta forma vê se funciona.

Um abraço !

Não foi dessa forma ainda :( no lugar do REMOVE coloquei all e mesmo assim não foi. :(

O erro é esse

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`tcc`.`fornecedor`, CONSTRAINT `FKC4F07D8598B180FE` FOREIGN KEY (`codigo`) REFERENCES `produto` (`codigo`))

Tente com orphanRemoval=true

@ManyToOne(cascade=CascadeType.REMOVE,orphanRemoval = true)
    @JoinColumn(referencedColumnName = "produto_codigo", name = "codigo")
    private Produto produto = new Produto();
solução!

Joao acredito que o erro esteja na anotação joinCollmn. porque é la que esta acusando o erro :(