Problemas com os composto no hIbernate, já é mysql

21 views
Skip to first unread message

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 12:31:18 PM9/1/15
to ce...@googlegroups.com
boa tarde.

Estou tendo dificuldades um entidade de persistência utilizando hIbernate, jpa e mysql,
Eu poste o problema no Guj e o link e este: 


Se acharem mais adequado respiro aqui.

Obrigado.


--

--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Par contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 1:20:49 PM9/1/15
to CEJUG
Peço desculpas pelo descuido, enviei do iPad.

feliperodrigues116

unread,
Sep 1, 2015, 2:19:12 PM9/1/15
to CEJUG
Carlos, boa tarde.
Não sei por qual motivo você usou a propriedade "insertable = false" nas colunas de chave primária da Classe PostDataQualification, pois os valores de chave primária devem ser informados no momento do insert. Pode fazer um teste retirando essa propriedade?

Vi que você tem uma coluna duplicada (idLearningProcess) na classe PostDataQualification. Não seria esse o problema?
@Id
@Column(name = "idLearningProcess", insertable = false, updatable = false)
private Integer idLearningProcess;
   
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "idLearningProcess", referencedColumnName = "id") })
private LearningProcess learningProcess;

Tenta deixar apenas uma delas.




Em terça-feira, 1 de setembro de 2015 13:31:18 UTC-3, Carlos Delfino Desenvolvedor de Softwares escreveu:

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 2:47:39 PM9/1/15
to ce...@googlegroups.com
Felipe tal prática é a sugerida para que se use chaves compostas quando estas são estrangeiras de outra tabela, no caso a chave idLearningProcess será populada pela relação da entidade PostDataQualification com a entidade LearningProcess com base em sua chave primária, e idPostData será poplulada com a relação PostData e sua chave primaria.

Há duas formas de se fazer tal relação com EmbbededID ou ClassID eu optei pela ClassID por ser mais natural o acesso as chaves quando se fazendo uma Query (que ainda não uso)


--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Par contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

--
-- Você está inscrito na lista de discussão técnica do CEJUG. Para sair da lista de discussão, envie um email para cejug+un...@googlegroups.com.
---
Você recebeu essa mensagem porque está inscrito no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 2:52:00 PM9/1/15
to ce...@googlegroups.com
Complementando, 

Como tais campos são preenchidos pelas relações destas duas entidades, não se deve inseri-los nem atualiza-los, deixando tal tarefa para o processo relacional das entidades.

No caso posso remover, mas está nos manuais:





--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Par contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

feliperodrigues116

unread,
Sep 1, 2015, 3:37:37 PM9/1/15
to CEJUG
Carlos, como você falou: "...tal prática é a sugerida para que se use chaves compostas quando estas são estrangeiras de outra tabela", porém no seu código as chaves primárias estão anotadas apenas com o @Id e @Column, ou seja não estão anotadas como estrangeiras:
    @Id
    @Column(name = "idLearningProcess", insertable = false, updatable = false)
    private Integer idLearningProcess;

    @Id
    @Column(name = "idPostData", insertable = false, updatable = false)
    private Integer idPostData;
Para usar tal recurso, você não deveria usar o @Id em conjunto com a @ManyToOne, referenciando as chaves estrangeiras?

Por exemplo:
        @Id
    @ManyToOne(optional = false, fetch = FetchType.EAGER)

    @JoinColumns({ @JoinColumn(name = "idLearningProcess", referencedColumnName = "id", insertable = false, updatable = false) })
    private LearningProcess learningProcess;

@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)

    @JoinColumn(name = "idPostData", referencedColumnName = "id", insertable = false, updatable = false, nullable = false, unique = false)
    private PostData post;

Espero ter ajudado.

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 4:09:05 PM9/1/15
to ce...@googlegroups.com
Não achei tal informação no manual do Hibernate Felipe.

Você poderia me dar mais detalhes?

Como ficaria portanto as classes?

Achei este post aqui no forum do Hibernate: https://forum.hibernate.org/viewtopic.php?t=987912

E conforme os comentários ali parece ser um bug do Hibernate.


--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Par contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 4:33:25 PM9/1/15
to ce...@googlegroups.com
Achei aqui Felipe, agora vi que na especificação 2.0 do JPA, pode ser usado o @Id diretamente na relação, mas não elimina a necessidade dos campos extras, pelo menos não consegui ainda sem eles, e mesmo assim ainda dá o mesmo erro.

@Column(name = "idLearningProcess", insertable = false, updatable = false)

private Integer idLearningProcess;


@Column(name = "idPostData", insertable = false, updatable = false)

private Integer idPostData;


@Id

@ManyToOne(optional = false, fetch = FetchType.EAGER)

@JoinColumns(@JoinColumn(name = "idLearningProcess", referencedColumnName = "id", insertable = true, updatable = false, nullable = false, unique = false))

private LearningProcess learningProcess;


@Id

@ManyToOne(optional = false, fetch = FetchType.EAGER)

@JoinColumn(name = "idPostData", referencedColumnName = "id", insertable = true, updatable = false, nullable = false, unique = false)

private PostData post;


@Column(name = "pontuation", insertable = false, updatable = false, nullable = true, unique = false)

private Integer pontuation;


@Temporal(TemporalType.TIMESTAMP)

@Column(nullable = false, insertable = true, unique = false)

private Date date;


@ManyToOne(optional = false, fetch = FetchType.EAGER)

@JoinColumn(name = "idClassification", referencedColumnName = "id", nullable = false, insertable = true, updatable = true, unique = false)

private Classification classification;


@ManyToOne(optional = false, fetch = FetchType.EAGER)

@JoinColumn(name = "idContext", referencedColumnName = "id", nullable = false, insertable = true, updatable = true, unique = false)

private Context context;


@ManyToOne(optional = true, fetch = FetchType.EAGER)

@JoinColumn(name = "idEvent", referencedColumnName = "id", nullable = true, insertable = false, updatable = false, unique = false)

private Event event;



--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Par contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 5:17:13 PM9/1/15
to ce...@googlegroups.com
Felipe, tu és o felizardo ganhador de uma cerveja bem gelada.

Obrigado pela ajuda. 

Problema resolvido.

Estarei postando no Gist do GitHub o resultado final das classes envolvidas, assim que conseguir acessa-lo (aqui está muito lento)



--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Para contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

Carlos Delfino Desenvolvedor de Softwares

unread,
Sep 1, 2015, 5:35:08 PM9/1/15
to ce...@googlegroups.com
Segue o Gist para quem possa interessar com o modelo adotado e funcionando relativo ao problema relatado: https://gist.github.com/carlosdelfino/f8a2ba9df8b4b62788cb


--
Carlos Delfino
Programador, Analista 
Um Homem de Ideias, Voluntário por natureza
Para contatos profissionais: consu...@carlosdelfino.eti.br 
Quer apoiar meus projetos curta minha fan page: http://fb.me/cdcp.ong
Atua com Arduino? visite: http://fb.me/CursoArduinoMinas
Visite minha página: http://carlosdelfino.eti.br

feliperodrigues116

unread,
Sep 2, 2015, 8:18:01 AM9/2/15
to CEJUG
Bom dia Carlos.
Desculpa por não ter respondido antes.

Rapaz... Que bom que deu certo. :D
Obrigado. rsrs

vlw.
Reply all
Reply to author
Forward
0 new messages