[RESOLVIDO]Mapeamento One to Many com Erro

Olá galera to tentando fazer uma aplicaçãozinha funcionar aqui com hibernate, dai toda vez q executo a tela q chama os devidos metodos diz a seguinte mensagem:

Exception in thread “main” org.hibernate.MappingException: Repeated column in mapping for entity: br.com.negocio.Disciplina column: cpf (should be mapped with insert=“false” update=“false”)

O que será? Abraços !!!

darksteel3000, favor postar o mapeamento da entidade Disciplina. Mas em um primeiro momento acredito que a coluna cpf está duplicada.


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.negocio;

import javax.persistence.*;
import java.io.Serializable;

/**
 *
 * @author Júnior
 */
@Entity
@Table(name="disciplina")
public class Disciplina implements Serializable{

    @Id
    @Column
    private String cpf;

    @Column(name="codigo_disciplina")
    private String codigo;
    @Column(name="nome_disciplina")
    private String nome;
    @Column(name="carga_horaria")
    private String cargaHoraria;

    @ManyToOne(fetch= FetchType.EAGER)
    @JoinColumn(name="cpf")   // Este comando serve para dizer a qual coluna no banco estara atada o "CPF"
    private Professor professor;

    @ManyToOne(fetch= FetchType.EAGER)
    @JoinColumn(name="cpf")   // Este comando serve para dizer a qual coluna no banco estara atada o "CPF"
    private Aluno aluno;



    public Disciplina(String codigo, String nome, String cargaHoraria) {
        this.codigo = codigo;
        this.nome = nome;
        this.cargaHoraria = cargaHoraria;
    }

    public Disciplina(String cpf, String codigo, String nome, String cargaHoraria) {
        this.cpf = cpf;
        this.codigo = codigo;
        this.nome = nome;
        this.cargaHoraria = cargaHoraria;
    }

    

    

    public Disciplina() {
    }

    public String getCargaHoraria() {
        return cargaHoraria;
    }

    public void setCargaHoraria(String cargaHoraria) {
        this.cargaHoraria = cargaHoraria;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    




}

Os atributos professor e aluno deverão ser de algum tipo Collection. Ex. List, Set, …

O id das entidades Professor e Aluno é o CPF ??? Se sim, acredito que não há necessidade de informar o name

Você poderia testar isso ? remova o parametro name …

[]s

Rapaz, tu é o kra pow, mermao, foi aquilo mesmo mais pq kra, eu naum entendi pq so tirando os names se tanto faz eu oloca-lo pois no meu banco esta com o mesmo nome. Sinceramente não entendi, podias me explicar a diferença de colocar os names e não coloca-los? Abração !!!

bom pelo q li vc so deve colocar o COLUMN num campo qdo é diferente no banco…

outra coisa, eu aprendi pra fazer as anotações de COLUMN tem q ser nos getters ou tanto faz?

Então, o name é utilizado para informar o nome físico da coluna da tabela quando o mesmo for diferente do nome utilizado em seu atributo.

O hibernate utiliza esses names na hora de montar as queries internamente, logo, se você duplicar esse name, quando o hibernate montar as queries ele encontrará duplicidade, gerando o erro.

Então, você só deverá utilizar o parametro name, quando seu atributo tiver um nome diferente da coluna fisica da tabela.

Beleza ???

[]s

Pow Mano Vlw mesmo pelas Dicas, Abração !!!

Certo Jovem !