Relacionamento CascadeType

Tenta não criar as listas dentro do objeto, tira o new ArrayList.

Vou tentar… :slight_smile:
Amanhã ajusto e tento e lhe falo brow… to caindo de sono :+1::+1:

Utilizando o select * from procedimento no MySQL, procedimento fica com uma coluna_id, é normal?

E outra coisa,
Fiz desta mesma forma que me falou para um outro relacionamento em meu projeto que é PEDIDO tem muito PRODUTOS (só pedido enxerga os produto).
Confirma tmb, utilizar assim?

Já estou bem confuso nisso?

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = RequisicaoDeCompra.class)
private List<Produto> produtos = new ArrayList<Produto>();

:

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Produto.class)
private List<RequisicaoDeCompra> pedidos = new ArrayList<RequisicaoDeCompra>();

@Rafael_Blum Desculpe a demora em responder, mas como não me marcou não apareceu a notificação para mim.
Explica um pouco melhor, não entendi o problema.

Muitas vezes em um relacionamento de tabelas principalmente no caso de pedidos e produtos é normal o pedido conhecer seus produtos mas os produtos não sabem de qual pedido são, caso queira que o produto guarde o número de id do pedido basta adicionar a anotação JoinColumn ao seu atributo.

Fiz assim e funcionou.
Agora queria saber, cada procedimento fica com uma coluna de setor_id? Ela é obrigatória, porque? É que tenho uma tela que crio o procedimento e nela não quero vincular ao setor, somente quando eu criar o setor e adicionando proced.

E percebi que as vezes temos problemas com a questão do fetch = FetchType.EAGER. Por que queremos listar e tal… vou ter problemas em criar o setor e adicionar o procedimentos?

@Rafael_Blum nesse tipo de relacionamento o banco cria uma terceira tabela, os procedimentos tem de ser vinculados ao setor pelo id, mas quando vc criar um setor você pode ou não informar um procedimento e o mesmo vale pro lado inverso. Tudo fica a critério da sua imaginação na hora de programar.

1 curtida

Na realidade, Villagram, estou utilizando esta mesma dica que me falou na relação de pedido e produto, esta correto da mesma forma né?

Na minha tela quando crio o produto, gera o erro:

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of 
br.com.project.model.classes.RequisicaoDeCompra.id

Ele está reclamando que está anotando o campo ao em vez do getter, ou esquecendo de colocar o @Access

Erro:

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: requisicaoDeCompra, for columns: [org.hibernate.mapping.Column(produtos)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290)
at org.hibernate.mapping.Property.isValid(Property.java:217)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464)
at org.hibernate.mapping.RootClass.validate(RootClass.java:235)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
at br.com.framework.hibernate.session.HibernateUtil.buildSessionFactory(HibernateUtil.java:38)
at br.com.framework.hibernate.session.HibernateUtil.<clinit>(HibernateUtil.java:30)
at br.com.project.filter.FilterOpenSessionInView.initFilterBean(FilterOpenSessionInView.java:43)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:179)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4699)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5339)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
  abr 29, 2018 10:54:05 PM org.apache.catalina.core.StandardContext filterStart
  GRAVE: Exception starting filter conexaoFilter
    java.lang.ExceptionInInitializerError: ERRO AO CRIAR A CONEXÃO SESSIONFACTORY!!
at 
    br.com.framework.hibernate.session.HibernateUtil.buildSessionFactory(HibernateUtil.java:44)
at br.com.framework.hibernate.session.HibernateUtil.<clinit>(HibernateUtil.java:30)
at 
   br.com.project.filter.FilterOpenSessionInView.initFilterBean(FilterOpenSessionInView.java:43)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:179)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4699)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5339)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

  abr 29, 2018 10:54:05 PM org.apache.catalina.core.StandardContext startInternal
   GRAVE: One or more Filters failed to start. Full details will be found in the appropriate container 
    log file
      abr 29, 2018 10:54:05 PM org.apache.catalina.core.StandardContext startInternal
     GRAVE: Context [/ger-industrialatividadesdynamico] startup failed due to previous errors
    abr 29, 2018 10:54:05 PM org.apache.catalina.core.ApplicationContext log
    INFORMAÇÕES: Closing Spring root WebApplicationContext
    6439 [localhost-startStop-1] INFO                                                         
    org.springframework.web.context.support.XmlWebApplicationContext - Closing Root         
     WebApplicationContext: startup date [Sun Apr 29 22:53:58 BRT 2018]; root of context 
       hierarchy
     6439 [localhost-startStop-1] INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@68f83aa8: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#1,contaRazaoController,documentoController,entidadeController,fornecedorController,procedimentoController,produtoController,requisicaoController,setorController,srvContaRazaoImpl,srvDocumentoImpl,srvEntida

Não tem uma forma mais fácil de fazer este relacionamento?

Cara o problema não é a anotação do id, agora o problema é esse new ArrayList() o hibernate não aceita isto.

Mas eu uso no projeto relacionamentos com List e utilizo new ArrayList e funciona normal.

O que me sugere?

Desculpa lhe atrapalhar ai brow.

Dentro da classe de objeto não inicialize a lista, faça isso onde você instancia ela ou no construtor dela.

1 curtida

Funcionou mesmo.

Você quer me dizer que agora eu inicializo a List na RequisicaoBean para ir adicionando os produtos?

E me diz, vou adicionando os produtos e automaticamente a coluna com id da requisicao em produto ficara com id da requisicao? Isso?

Isto mesmo, crie a lista no RequisicaoBean e adicione os produtos.

Salve o objeto inteiro que contém a lista…o hibernate faz o resto.

1 curtida

Sim, muito obrigado, Villagram!!! :slight_smile:

Gostaria de ver com você se pode me ajudar em outras questões do meu projeto. Não realizei ainda, mas nem sei por onde começar.

Tem como em outras postagens te chamar ou te marcar?

@Rafael_Blum Tem como marcar sim, mas se precisar pode me procurar pelo e-mail também…tiagoadmstz@yahoo.com.br

Ta ok!!! Obrigado!!! valew mesmo!! E desculpe lhe atrapalhar!! :slight_smile: :slight_smile:

Vou marcar a resposta lá!!!

Ola, Villagram
Poderia me ajudar no topico?