Meu Join não funciona usando HQL

Java

08/05/2011

Esse join não funciona. É meu primeiro contato com HQL.
Query query =  getEntityManager().createQuery(" from Escola esc ,Matricula mat, Professor prof " +
                                                      " where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and" +
                                                      " mat.situacao = 'A' and idprofessor = 2 order by esc.nome"); 
 

Como devo fazer para que funcione? O erro abaixo

exception javax.servlet.ServletException: org.hibernate.QueryException: could not resolve property: idprofessor of: br.com.mosaicodigital.modelo.Professor [ from br.com.mosaicodigital.modelo.Escola esc ,br.com.mosaicodigital.modelo.Matricula mat, br.com.mosaicodigital.modelo.Professor prof where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and mat.situacao = 'A' and idprofessor = 2 order by esc.nome] root cause java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: idprofessor of: br.com.mosaicodigital.modelo.Professor [ from br.com.mosaicodigital.modelo.Escola esc ,br.com.mosaicodigital.modelo.Matricula mat, br.com.mosaicodigital.modelo.Professor prof where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and mat.situacao = 'A' and idprofessor = 2 order by esc.nome] root cause org.hibernate.QueryException: could not resolve property: idprofessor of: br.com.mosaicodigital.modelo.Professor [ from br.com.mosaicodigital.modelo.Escola esc ,br.com.mosaicodigital.modelo.Matricula mat, br.com.mosaicodigital.modelo.Professor prof where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and mat.situacao = 'A' and idprofessor = 2 order by esc.nome] note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.
Pjava

Pjava

Curtidas 0

Respostas

Davi Costa

Davi Costa

08/05/2011

Pelo erro diz que não existe essa propriedade idprofessor mapeada naclasse professor.
Posta ele p gente ver.

Att Davi
GOSTEI 0
Robson Teixeira

Robson Teixeira

08/05/2011

poste ai as suas classe de modelo para que possamos ver os erros blz??

att
 robson
GOSTEI 0
Pjava

Pjava

08/05/2011

@Entity
@Table(name="professor")
@SequenceGenerator(name="seq_professor", sequenceName="professor_idprofessor_seq", allocationSize=1)
public class Professor extends Pessoa implements Serializable {

    
    private static final long serialVersionUID = 8683441216699864995L;
    
    //@Column(name="idprofessor")
    private int idProfessor;
    //@Column(name="foto")
    private String foto;
    private Pessoa pessoa;

    public int getIdProfessor() {
        return idProfessor;
    }

    public void setIdProfessor(int idProfessor) {
        this.idProfessor = idProfessor;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((foto == null) ? 0 : foto.hashCode());
        result = prime * result + idProfessor;
        result = prime * result + ((pessoa == null) ? 0 : pessoa.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!super.equals(obj))
            return false;
        if (getClass() != obj.getClass())
            return false;
        Professor other = (Professor) obj;
        if (foto == null) {
            if (other.foto != null)
                return false;
        } else if (!foto.equals(other.foto))
            return false;
        if (idProfessor != other.idProfessor)
            return false;
        if (pessoa == null) {
            if (other.pessoa != null)
                return false;
        } else if (!pessoa.equals(other.pessoa))
            return false;
        return true;
    }
    
    
}
GOSTEI 0
Pjava

Pjava

08/05/2011

Refiz o etributo, java é Case Sensitive, mas como HQL não o é, achei que ele não se importaria com isso, mas se importou sim. Bem, fiz as correções e agora deu um novo erro. Ele diz de uma coluna no banco que não existe. Procurei onde por ventura eu faço menção a ela e não encontrei nada. Para não ficar postando todo o erro(muito grande) postei apenas,acho, o essencial.

javax.servlet.ServletException: org.hibernate.exception.SQLGrammarException: could not execute query
org.postgresql.util.PSQLException: ERRO: coluna professor2_.tipopessoa não existe
  Posição: 662


Esse é meu select em HQL.
public List<Escola> findAll() { 
                
        Query query =  getEntityManager().createQuery(" from Escola esc ,Matricula mat, Professor prof " +
                                                      " where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and" +
                                                      " mat.situacao = 'A' and mat.idprofessor = 2 order by esc.nome");    
             return (List<Escola>) query.getResultList();

            
}

GOSTEI 0
Pjava

Pjava

08/05/2011

Resolvi o tipopessoa. Era um ENUM que apontava para tipopessoa e na realidade o nome dessa coluna era tipo. Corrigi e agora o erro mudou para:
org.postgresql.util.PSQLException: ERRO: coluna professor2_.idprofessor não existe Posição: 692

Realmente eu não estou entendendo mais nada. A coluna idprofessor ela existe em várias entidades, várias mesmo,
pois ele é o cara principal no projeto, o professor.

GOSTEI 0
Pjava

Pjava

08/05/2011

se testo sem o join funciona, mas com ele(tem que ser com ele) não funciona.
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Remova o comentário da sua entidade:

@Column(name="idprofessor")
    private int idProfessor;


É esperado que no banco a coluna esteja com esse nome:  idprofessor,
e no hql vc esqueci banco e o que está entre parênteses e coloca idProfessor, o HQL já faz o meio de campo para vc. Não é problema de join mas sim de coluna, vc está trabalhando com java e um framework ORM, não é uma chamada comum no banco.

Seu hql depois de corrigir essa parte ainda vai dar outro erro:

Query query =  getEntityManager().createQuery(" from Escola esc ,Matricula mat, Professor prof " +
                                                      " where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and" +
                                                      " mat.situacao = 'A' and mat.idprofessor = 2 order by esc.nome");   
             return (List<Escola>) query.getResultList();

Vc não especificou qual tabela retornaria a consulta, qdo fosse fazer o cast no return tb talvez dê erro: que tal colocar :

Query query =  getEntityManager().createQuery("select esc from Escola esc ,Matricula mat, Professor prof " +
                                                      " where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and" +
                                                      " mat.situacao = 'A' and mat.idprofessor = 2 order by esc.nome");   
             return (List<Escola>) query.getResultList();

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Quando rodo o join, me dá um esse erro:

org.postgresql.util.PSQLException: ERRO: coluna professor2_.dtype não existe Posição: 218

Eu não sei mesmo onde esse dtype aparece. Pesquisei nos meus beans, em todas as classes e nada consegui
resolver isso. Não sei de onde ele aparece. Se retiro o Join aí funciona. To pesquisando, mas não sei de onde veio esse ara.


Query query =  getEntityManager().createQuery("select esc from Escola esc ,Matricula mat, Professor prof " +
                                                      " where mat.idescola = esc.idescola and mat.idprofessor = prof.idprofessor and" +
                                                      " mat.situacao = 'A' and mat.idprofessor = 2 order by esc.nome");   
             return (List<Escola>) query.getResultList();
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Como professor extends de pessoa, talvez essa referência dtype, seja de pessoa, posta essa classe para gente ver.

att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Não vejo esse dtype

@Entity
@Table(name="pessoa")
@SequenceGenerator(name="seq_pessoa", sequenceName="pessoa_idpessoa_seq", allocationSize=1)
public class Pessoa implements Serializable {

    private static final long serialVersionUID = -7427597435054021998L;
    
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_pessoa")
    @Column(name="idPessoa")
    private int idPessoa;
    @Column(name="nome")
    private String nome;
    @Column(name="sobrenome")
    private String sobrenome;
    @Column(name="sexo")
    private EnumSexo sexo;
    @Column(name="cpf")
    private String cpf;
    @Column(name="telefoneComercial")
    private String telefoneComercial;
    @Column(name="telefoneResidencial")
    private String telefoneResidencial;
    @Column(name="email")
    private String email;
    @Column(name="tipo")
    private EnumTipoPessoa tipo;

    public int getIdPessoa() {
        return idPessoa;
    }

    public void setIdPessoa(int idPessoa) {
        this.idPessoa = idPessoa;
    }

    public String getNome() {
        return nome;
    }

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

    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    public EnumSexo getSexo() {
        return sexo;
    }

    public void setSexo(EnumSexo sexo) {
        this.sexo = sexo;
    }

    public String getCpf() {
        return cpf;
    }

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

    public String getTelefoneComercial() {
        return telefoneComercial;
    }

    public void setTelefoneComercial(String telefoneComercial) {
        this.telefoneComercial = telefoneComercial;
    }

    public String getTelefoneResidencial() {
        return telefoneResidencial;
    }

    public void setTelefoneResidencial(String telefoneResidencial) {
        this.telefoneResidencial = telefoneResidencial;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public EnumTipoPessoa getTipoPessoa() {
        return tipo;
    }

    public void setTipoPessoa(EnumTipoPessoa tipo) {
        this.tipo = tipo;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((cpf == null) ? 0 : cpf.hashCode());
        result = prime * result + ((email == null) ? 0 : email.hashCode());
        result = prime * result + idPessoa;
        result = prime * result + ((nome == null) ? 0 : nome.hashCode());
        result = prime * result + ((sexo == null) ? 0 : sexo.hashCode());
        result = prime * result
                + ((sobrenome == null) ? 0 : sobrenome.hashCode());
        result = prime
                * result
                + ((telefoneComercial == null) ? 0 : telefoneComercial
                        .hashCode());
        result = prime
                * result
                + ((telefoneResidencial == null) ? 0 : telefoneResidencial
                        .hashCode());
        result = prime * result
                + ((tipo == null) ? 0 : tipo.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Pessoa other = (Pessoa) obj;
        if (cpf == null) {
            if (other.cpf != null)
                return false;
        } else if (!cpf.equals(other.cpf))
            return false;
        if (email == null) {
            if (other.email != null)
                return false;
        } else if (!email.equals(other.email))
            return false;
        if (idPessoa != other.idPessoa)
            return false;
        if (nome == null) {
            if (other.nome != null)
                return false;
        } else if (!nome.equals(other.nome))
            return false;
        if (sexo != other.sexo)
            return false;
        if (sobrenome == null) {
            if (other.sobrenome != null)
                return false;
        } else if (!sobrenome.equals(other.sobrenome))
            return false;
        if (telefoneComercial == null) {
            if (other.telefoneComercial != null)
                return false;
        } else if (!telefoneComercial.equals(other.telefoneComercial))
            return false;
        if (telefoneResidencial == null) {
            if (other.telefoneResidencial != null)
                return false;
        } else if (!telefoneResidencial.equals(other.telefoneResidencial))
            return false;
        if (tipo != other.tipo)
            return false;
        return true;
    }
    
    
}
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

cara tá estranho isso mesmo,
bom mais alguns toques,
esse serial que vc gera por conta de impleemntar Serializable, vc não cria getters e setters para ele não.
para não ter problema e o hibernate pensar que vc precisa incluí-lo no banco.
No equals e hashCode será que não seria interessante vc usar só atributo id?
Não é impossível termos situações que passemos outros atributos não, mas lembre vc tem realmente um porquê fazer isso?
Com somente o id vai ser mais performático.
Se vc quer que a coluna seja unique, tem umaforma de fazer isso:

@Table(name = "pessoa", uniqueConstraints={@javax.persistence.UniqueConstraint(columnNames={"cpf","email","nome"})})

Sexo não dá pq ai vc só vai consegui cadastrar duas pessoas no banco.


Cara posta agora seu arquivo ou classe de configuração do hibernate para ver se no console está mostarndo a consulta gerada pelo hibernate, se já estiver mostrando a consulta, posta aki a consula para verificarmos se:

professor2_.dtype é referente a tabela professor mesmo, as vezes nasconsultas o hibernate cria uns nomes meio estranho para tabelas..



Att Davi

GOSTEI 0
Pjava

Pjava

08/05/2011

<?xml version="1.0" encoding="UTF-8"?>

<persistence>
    <persistence-unit name="puMosaicoDigital">
        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5435/Teste" />
            <property name="hibernate.connection.username" value="postgres" />
            <property name="hibernate.connection.password" value="123456" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

A porta é a 5435 mesmo. Isso tá correto.
GOSTEI 0
Pjava

Pjava

08/05/2011

Achei estranho foi o log gerado. Ele não parece ser o que deveria estar no join. Veja abaixo o log gerado INFO: Hibernate: select escola0_.idescola as idescola2_, escola0_.nome as nome2_, escola0_.telefone as telefone2_, escola0_.fax as fax2_, escola0_.email as email2_ from escola escola0_, matricula matricula1_, pessoa professor2_ where professor2_.DTYPE='Professor' and matricula1_.idescola=escola0_.idescola and matricula1_.idprofessor=professor2_.idprofessor and matricula1_.situacao='A' and idprofessor=1 order by escola0_.nome
GOSTEI 0
Pjava

Pjava

08/05/2011

INFO: Hibernate:       select          escola0_.idescola as idescola2_,          escola0_.nome as nome2_,          escola0_.telefone as telefone2_,          escola0_.fax as fax2_,          escola0_.email as email2_       from          escola escola0_,          matricula matricula1_,          pessoa professor2_       where          professor2_.DTYPE='Professor'           and matricula1_.idprofessor=professor2_.idprofessor           and matricula1_.idescola=escola0_.idescola           and matricula1_.situacao='A'           and idprofessor=1       order by          escola0_.nome  
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Começo a desconfiar que ele está te exigindo o tipo de estratégia de herança.
Vê isso nakele material que te passei por email, lá fala das estratégias de herança.

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Ok, mas tem uma coisa e não se isso se refere a herança e etc... Ao rodar no pgAdmin essa query, removi essa linha e continuou a dar erro:
professor2_.DTYPE='Professor'
O erro é que não existe a coluna professor2_.idprofessor, aí removi essa linha também e funcionou. Ou seja, nada referente a professor funciona. Pode ser isso, que o Davi falou sim e vou dar uma olhada agora, mas estranho. Essa linha tambem foi removida e ai funcionou
and matricula1_.idprofessor=professor2_.idprofessor
GOSTEI 0
Pjava

Pjava

08/05/2011

Davi, aquele material aqui na empresa não consigo abrir
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Essa classe não está mapeada corretamente,o que fica em @Column tem que bater com o banco.
Essa é a maior exigência do Hibernate JPA, para funcionar direitim, por isso algumas vezes havia te falado que esse mapeamento não é simples e exige uma certa experiência.
Verifica com muito cuidado seu mapeamento e vai conferindo com o banco.

Mais uma dúvida minha.. na hora que a app sobe ele não demonstra nenhum erro de mapeamento?

Que tal analisarmos a possibilidade de gerarmos o banco a partir do nosso mapeamento... sria o seguinte, vc deixa seu banco intacto, mas cria outro banco com um nome parecido e altera seu arquivo de configuração para o novo banco que vc criou e pede para o hibernate gerar no seu arquivo de configuração tb...e compara os ois bancos
pq essas picuinhas de idProfessor e idprofessor.. jánão vai ter mais... e creio que seu DBA não vai reclamar se o banco gerado for o mesmo. digo tabelas e colunas

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Vish cara :/
aqui tb não consigo, se conseguisse copiaava e colava em um microsoftword...  :/


Bom só mais um toque para sua app gerar o banco vc faz a seguinte alteração:

<?xml version="1.0" encoding="UTF-8"?>

<persistence>
    <persistence-unit name="puMosaicoDigital">
        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5435/NovoBanco" />
            <property name="hibernate.connection.username" value="postgres" />
            <property name="hibernate.connection.password" value="123456" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>


obviamente que vc vai ter que pelo menos criar esse banco no postgresql...só criar o banco mesmo, vazio sem nada.
Compara os dois bancos.

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Não entendi Davi, como assim um novo banco? Não entendi essa parte. Que banco devo criar, um novo banco Teste ou que mais? Vejo q vc marcou duas linhas lá. NovoBanco e  <property name="hibernate.hbm2ddl.auto" value="update" /> O que significa isso realmente?
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

vc cria um banco no postgres do jeito que quiser...com o nome por exemplo Teste2...
só faz isso.. cria só colocando o nome e deixa lá.
vc adiciona essa linhas em destaque do post que te passei e altera novoBanco pelo nome que vc criou o banco no postgres e add essa linha nesse arquivo:
<property name="hibernate.hbm2ddl.auto" value="update" />

A própria app vai gerar o bancopara vc (tabelas e colunas)

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Dá uma olhada nessematerial sobre herança:

http://blog.caelum.com.br/jpa-com-hibernate-heranca-e-mapeamentos/
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Não reparei que o segundo link ainda é de uma versão antiga dohibernate com xml, vc está usando annotattions então é melhor ver esse link:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e1168

http://www.guj.com.br/java/86141-hibernate-mixing-inheritance-strategies

At Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Ele gerou as tabelas nesse novbo banco. Voltei para o banco anterior e não deu mais zica, mas não carregou nenhuma escola como antes estava fazendo.
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Mas deu algum erro?
Será que não é cache do eclipse, pq não era p carregar nenhum banco do banco novo pois vc não inseriu nenhum lá.
Observa isso e compara o banco gerado com o banco antigo.
Aproveita e vai testando os sql gerados no postgres para ver se as consultas realmente tem retorno.

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Criou uma tabela chamada cliente e não professor
GOSTEI 0
Pjava

Pjava

08/05/2011

Essa linha que eu coloquei no persistence, ele simplesmente adicionou em pessoa os campos de Professor, ficando professor uma tabela só e não é isso que gostaríamos e ainda criou um campo Pessoa do tipo bytea. Não sei o que é isso.
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Ok, mais um sinal que o mapeamento está errado.
vai ter que analisar bem o que vc quer conforme os links que te passei, naquele material que te passei por email, já estava bem mastigadim, pena que não dê para abrir aí, mas aconcelho dar uma olhada depois em casa.

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

O Hibernate está colocando os atributos da classe professor na classe pessoa, quando gera a tabela no banco. Ele está entendendo que esses atributos pertencem a classe mãe, mas pertence a classe filha.
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Pois é... qual estratégia de herança vc colocou?
A default se não me engano faz isso, vc deve estudar e analisar qual estratégia atende a sua na sua necessidade.

att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Trabalha eu e meu amigo aqui. Nós mudamos as classes Pessoa e Professor e ficou assim:
@Entity
@Table(name="professor")
@PrimaryKeyJoinColumn(name="idpessoa")
public class Professor extends Pessoa {    
    @Column(name="foto")
    private String foto;    
    public String getFoto() {
        return foto;
    }
    public void setFoto(String foto) {
        this.foto = foto;
    }
}

@Entity
@Table(name="pessoa")
@Inheritance(strategy=InheritanceType.JOINED)
@SequenceGenerator(name="seq_pessoa", sequenceName="pessoa_idpessoa_seq", allocationSize=1)
public class Pessoa {    
    @Id
    @Column(name="idPessoa")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_pessoa")
    private int idPessoa;    
    @Column(name="nome")
    private String nome;    
    @Column(name="sobrenome")
    private String sobrenome;    
    @Enumerated(EnumType.STRING)
    private EnumSexo sexo;    
    @Column(name="cpf")
    private String cpf;    
    @Column(name="telefoneComercial")
    private String telefoneComercial;    
    @Column(name="telefoneResidencial")
    private String telefoneResidencial;    
    @Column(name="email")
    private String email;    
    @Enumerated(EnumType.STRING)
    private EnumTipoPessoa tipo;
    @OneToOne(mappedBy="pessoa")
    private Login login;    
    public int getIdPessoa() {
        return idPessoa;
    }
    public void setIdPessoa(int idPessoa) {
        this.idPessoa = idPessoa;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getSobrenome() {
        return sobrenome;
    }
    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }
    public EnumSexo getSexo() {
        return sexo;
    }
    public void setSexo(EnumSexo sexo) {
        this.sexo = sexo;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getTelefoneComercial() {
        return telefoneComercial;
    }
    public void setTelefoneComercial(String telefoneComercial) {
        this.telefoneComercial = telefoneComercial;
    }
    public String getTelefoneResidencial() {
       return telefoneResidencial;
    }
    public void setTelefoneResidencial(String telefoneResidencial) {
        this.telefoneResidencial = telefoneResidencial;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public EnumTipoPessoa getTipoPessoa() {
        return tipo;
    }
    public void setTipoPessoa(EnumTipoPessoa tipo) {
        this.tipo = tipo;
    }
    public Login getLogin() {
        return login;
    }
    public void setLogin(Login login) {
        this.login = login;
    }    
}

GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

ok.. limpa akele banco novo criado por vc e sobi denovo a app para gerar o banco... (para limpar o banco é só removê-lo e criá-lo dnovo...colocando só o nome... mesmos passos já feito antes)e compara os bancos

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

Ele criou outras tabelas, mas na tabela Pessoa ele cria idprofessor,foto e pessoa. Esses(exceto pessoa) são atributos da classe Professor somente. Porque ele cria também em Pessoa?
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Realmente está tudo certo, não deveria acontecer isso, o único erro que vi de passada é que pessoa deve implementar Serializable.
Mas assim que der vou ver essas classes com mais calma

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

08/05/2011

Dei uma nalisada melhor, vc só colocou foto na classe Professor, reveja isso também.
Os atributos que são específicos de professor devem ser declarados na sua própria classe.

Os outros que são genéricos de Pessoa ficam em pessoa mesmo, vc pode até manter o id de professor sem problemas, daio banco vai criar o id de pessoa (chave estrangeira) na tabelaprofessor.

Att Davi
GOSTEI 0
Pjava

Pjava

08/05/2011

O join funciona, mas sem o idpessoa, ou seja, é um problema na herança e eu não consigo resolver.
GOSTEI 0
Pjava

Pjava

08/05/2011

Mapeei a classe matricula e veja o novo erro:
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on br.com.mosaicodigital.modelo.Matricula.idescola references an unknown entity: java.lang.Integer
GOSTEI 0
Dyego Carmo

Dyego Carmo

08/05/2011

Rapaz , instale o netbeans e mande ele gerar todas as entidades direto do banco de dados...

Vai ser MAIS produtivo.. ae voce pega as entidades geradas e usa aonde preferir :)


GOSTEI 0
POSTAR