[RESOLVIDO]Erro ao cadastrar: Unable to define/override @Id(s) on a subclass

5 respostas
Jackye

Olá pessoal!!

Estou criando uma aplicação desktop, usando NetBeans 7.0 + BD SQL Server 2008 + Hibernate.

Para fazer o teste de cadastro utilizo o seguinte código:
public class TesteCadastro {
    
    public static void main(String[] args) {
         Aluno aluno = new Aluno();
  AlunoDAO alunoDAO = new AlunoDAO();
  
        aluno.setNuMatricula(213213123);      
        aluno.setNoUsuario("Jackeline");
        aluno.setDaNascimento(new Date());
        aluno.setTxSexo('F');
        aluno.setNuCPF("[CPF removido]");
        aluno.setNuRG("005.465.123");
        aluno.setTxLogradouro("sdfssfsfdgfdf");
        aluno.setTxBairro("fsdsdffsdf");
        aluno.setTxCidade("sdfsfsdsfsdf");
        aluno.setNuCep("59550000");
        aluno.setTxUF("RN");
        aluno.setNuCelular("([telefone removido]");
        aluno.setNuSenha("12@#$5");
        aluno.setNuCPF("200934975");
        aluno.setNoMae("Maria");
        aluno.setNoPai("Jose");
        aluno.setTxModalidadeEnsino("Ensino Medio");
        aluno.setTxSerie("2ºAno");
        aluno.setTxTurma('A');
        aluno.setTxTurno("matutino");
        aluno.setDaCadastro(new Date());
        
        alunoDAO.salvar(aluno);
    }   
}
Este é o código da classe Aluno:
package br.com.Dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

@Entity
@PrimaryKeyJoinColumn(name="CodUsuario")
@Table(name = "Aluno", catalog = "ControleBibliotecario", schema = "dbo")

public class Aluno extends Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @Column(name = "NuMatricula", nullable = false)
    private int nuMatricula;
    @Basic(optional = false)
    @Column(name = "NoPai", nullable = false, length = 100)
    private String noPai;
    @Basic(optional = false)
    @Column(name = "NoMae", nullable = false, length = 100)
    private String noMae;
    @Basic(optional = false)
    @Column(name = "TxModalidadeEnsino", nullable = false, length = 20)
    private String txModalidadeEnsino;
    @Column(name = "TxSerie", length = 20)
    private String txSerie;
    @Basic(optional = false)
    @Column(name = "TxTurma", nullable = false)
    private char txTurma;
    @Basic(optional = false)
    @Column(name = "TxTurno", nullable = false, length = 20)
    private String txTurno;
    
    @Id
    @Basic(optional = false)
    @Column(name = "CodUsuario", nullable = false)
    private Integer codUsuario;
    @JoinColumn(name = "CodUsuario", referencedColumnName = "CodUsuario", nullable = false, insertable = false, updatable = false)
    @OneToOne(optional = false)
    private Usuario usuario;

    public Aluno() {
    }

    public Aluno(Integer codUsuario) {
        this.codUsuario = codUsuario;
    }

    public Aluno(Integer codUsuario, int nuMatricula, String noPai, String noMae, String txModalidadeEnsino, char txTurma, String txTurno) {
        this.codUsuario = codUsuario;
        this.nuMatricula = nuMatricula;
        this.noPai = noPai;
        this.noMae = noMae;
        this.txModalidadeEnsino = txModalidadeEnsino;
        this.txTurma = txTurma;
        this.txTurno = txTurno;
    }

    public int getNuMatricula() {
        return nuMatricula;
    }

    public void setNuMatricula(int nuMatricula) {
        this.nuMatricula = nuMatricula;
    }

    public String getNoPai() {
        return noPai;
    }

    public void setNoPai(String noPai) {
        this.noPai = noPai;
    }

    public String getNoMae() {
        return noMae;
    }

    public void setNoMae(String noMae) {
        this.noMae = noMae;
    }

    public String getTxModalidadeEnsino() {
        return txModalidadeEnsino;
    }

    public void setTxModalidadeEnsino(String txModalidadeEnsino) {
        this.txModalidadeEnsino = txModalidadeEnsino;
    }

    public String getTxSerie() {
        return txSerie;
    }

    public void setTxSerie(String txSerie) {
        this.txSerie = txSerie;
    }

    public char getTxTurma() {
        return txTurma;
    }

    public void setTxTurma(char txTurma) {
        this.txTurma = txTurma;
    }

    public String getTxTurno() {
        return txTurno;
    }

    public void setTxTurno(String txTurno) {
        this.txTurno = txTurno;
    }

    @Override
    public Integer getCodUsuario() {
        return codUsuario;
    }

    @Override
    public void setCodUsuario(Integer codUsuario) {
        this.codUsuario = codUsuario;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codUsuario != null ? codUsuario.hashCode() : 0);
        return hash;
    }

    @Override
   public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Aluno)) {
            return false;
        }
        Aluno other = (Aluno) object;
        if ((this.codUsuario == null && other.codUsuario != null) || (this.codUsuario != null && !this.codUsuario.equals(other.codUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.Dominio.Aluno[ codUsuario=" + codUsuario + " ]";
    }
    
}
E o código da classe Usuario é:
package br.com.Dominio;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Inheritance(strategy= InheritanceType.JOINED)
@Table(name = "Usuario", catalog = "ControleBibliotecario", schema = "dbo")

public class Usuario implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @Basic(optional = false)
    @Column(name = "CodUsuario", nullable = false)
    private Integer codUsuario;
    @Basic(optional = false)
    @Column(name = "NoUsuario", nullable = false, length = 100)
    private String noUsuario;
    @Basic(optional = false)
    @Column(name = "DaNascimento", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date daNascimento;
    @Basic(optional = false)
    @Column(name = "TxSexo", nullable = false)
    private char txSexo;
    @Basic(optional = false)
    @Column(name = "NuCPF", nullable = false, length = 15)
    private String nuCPF;
    @Basic(optional = false)
    @Column(name = "NuRG", nullable = false, length = 12)
    private String nuRG;
    @Basic(optional = false)
    @Column(name = "TxLogradouro", nullable = false, length = 200)
    private String txLogradouro;
    @Basic(optional = false)
    @Column(name = "TxBairro", nullable = false, length = 40)
    private String txBairro;
    @Basic(optional = false)
    @Column(name = "TxCidade", nullable = false, length = 40)
    private String txCidade;
    @Basic(optional = false)
    @Column(name = "NuCep", nullable = false, length = 8)
    private String nuCep;
    @Basic(optional = false)
    @Column(name = "TxUF", nullable = false, length = 2)
    private String txUF;
    @Column(name = "NuTelefone", length = 13)
    private String nuTelefone;
    @Basic(optional = false)
    @Column(name = "NuCelular", nullable = false, length = 13)
    private String nuCelular;
    @Basic(optional = false)
    @Column(name = "TxEmail", nullable = false, length = 20)
    private String txEmail;
    @Column(name = "TxObservacao", length = 100)
    private String txObservacao;
    @Basic(optional = false)
    @Column(name = "DaCadastro", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date daCadastro;
    @Basic(optional = false)
    @Column(name = "NuSenha", nullable = false, length = 6)
    private String nuSenha;
    
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "usuario")
    private Aluno aluno;

    public Usuario() {
    }

    public Usuario(Integer codUsuario) {
        this.codUsuario = codUsuario;
    }

    public Usuario(Integer codUsuario, String noUsuario, Date daNascimento, char txSexo, String nuCPF, String nuRG, String txLogradouro, String txBairro, String txCidade, String nuCep, String txUF, String nuCelular, String txEmail, Date daCadastro, String nuSenha) {
        this.codUsuario = codUsuario;
        this.noUsuario = noUsuario;
        this.daNascimento = daNascimento;
        this.txSexo = txSexo;
        this.nuCPF = nuCPF;
        this.nuRG = nuRG;
        this.txLogradouro = txLogradouro;
        this.txBairro = txBairro;
        this.txCidade = txCidade;
        this.nuCep = nuCep;
        this.txUF = txUF;
        this.nuCelular = nuCelular;
        this.txEmail = txEmail;
        this.daCadastro = daCadastro;
        this.nuSenha = nuSenha;
    }

    public Integer getCodUsuario() {
        return codUsuario;
    }

    public void setCodUsuario(Integer codUsuario) {
        this.codUsuario = codUsuario;
    }

    public String getNoUsuario() {
        return noUsuario;
    }

    public void setNoUsuario(String noUsuario) {
        this.noUsuario = noUsuario;
    }

    public Date getDaNascimento() {
        return daNascimento;
    }

    public void setDaNascimento(Date daNascimento) {
        this.daNascimento = daNascimento;
    }

    public char getTxSexo() {
        return txSexo;
    }

    public void setTxSexo(char txSexo) {
        this.txSexo = txSexo;
    }

    public String getNuCPF() {
        return nuCPF;
    }

    public void setNuCPF(String nuCPF) {
        this.nuCPF = nuCPF;
    }

    public String getNuRG() {
        return nuRG;
    }

    public void setNuRG(String nuRG) {
        this.nuRG = nuRG;
    }

    public String getTxLogradouro() {
        return txLogradouro;
    }

    public void setTxLogradouro(String txLogradouro) {
        this.txLogradouro = txLogradouro;
    }

    public String getTxBairro() {
        return txBairro;
    }

    public void setTxBairro(String txBairro) {
        this.txBairro = txBairro;
    }

    public String getTxCidade() {
        return txCidade;
    }

    public void setTxCidade(String txCidade) {
        this.txCidade = txCidade;
    }

    public String getNuCep() {
        return nuCep;
    }

    public void setNuCep(String nuCep) {
        this.nuCep = nuCep;
    }

    public String getTxUF() {
        return txUF;
    }

    public void setTxUF(String txUF) {
        this.txUF = txUF;
    }

    public String getNuTelefone() {
        return nuTelefone;
    }

    public void setNuTelefone(String nuTelefone) {
        this.nuTelefone = nuTelefone;
    }

    public String getNuCelular() {
        return nuCelular;
    }

    public void setNuCelular(String nuCelular) {
        this.nuCelular = nuCelular;
    }

    public String getTxEmail() {
        return txEmail;
    }

    public void setTxEmail(String txEmail) {
        this.txEmail = txEmail;
    }

    public String getTxObservacao() {
        return txObservacao;
    }

    public void setTxObservacao(String txObservacao) {
        this.txObservacao = txObservacao;
    }

    public Date getDaCadastro() {
        return daCadastro;
    }

    public void setDaCadastro(Date daCadastro) {
        this.daCadastro = daCadastro;
    }

    public String getNuSenha() {
        return nuSenha;
    }

    public void setNuSenha(String nuSenha) {
        this.nuSenha = nuSenha;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codUsuario != null ? codUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.codUsuario == null && other.codUsuario != null) || (this.codUsuario != null && !this.codUsuario.equals(other.codUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.Dominio.Usuario[ codUsuario=" + codUsuario + " ]";
    }
    
}
Na hora de cadastrar aparece o seguinte erro: [color=red]Unable to define/override @Id(s) on a subclass: br.com.Dominio.Aluno[/color]

Podem me ajudar!!
Agradeço.
:thumbup:

5 Respostas

Hebert_Coelho

Tenta deixar apenas assim:

@Id private Integer codUsuario;
Ao invés de ter aquele monte de coisa lá.

Jackye

Oi jakefrog, fiz o que pediu na subClasse, mas o erro persiste.
:frowning:

Hebert_Coelho

Agora que eu vi que uma é sublcasse da outra.

Quando você meche com herança não é assim que você faz. Realmente vai dar pau.

Esses posts te mostram estratégias que você pode adotar:
Uma tabela por herança
JPA Uma Classe por Sub-Classe

Jackye

Valeu aí a dica jakefrog!! :thumbup:

Jackye

Olá! Consegui resolver. O problema era o mapeamento de muitas classes, refiz o mapeamento utilizando apenas as classes que usaria no momento, e consegui resolver o problema de incapacidade de subescrever os @Id(s ) em uma subclasse. Porém surgiu um erro com a PK, pois o Hibernate não aceita herança de código incrementado, por exemplo, como utilizo o SQL Server 2008, usei o IDENTITY para incrementar o código, então como a Super Classe Usuario vai herdar atributos pra aluno, portanto somente a Super Classe terá Auto-Incremento.

Beijos, galera!!
:thumbup:

Ps.: Se eu estiver errada em algum ponto me corrijam! :smiley: (Sou novata no ramo de programação. :roll: )

Criado 9 de janeiro de 2012
Ultima resposta 10 de jan. de 2012
Respostas 5
Participantes 2