Problemas com Hibernate 3

6 respostas
luisbizzan

Pessoal estou começando a estudar Hibernate e estou seguindo um tutorial chamado Introdução ao Hibernate 3 e aconteceu o seguinte problema: Could not find a getter for turma in class hibernate.Disciplina

Ta falando que eu não tenho o metodo get turma na classe Disciplina, mas a a classe ao qual tem o metodo é a turma que busca o id da Disciplina, não esta correto ?

A mensagem de erro:

Minha Classe Turma:

package hibernate;

public class Turma {

    private Integer id;
    private Disciplina Disciplina_id;
    private Professor Professor_id;
    private String nome;
    
    public Integer getid(){
        return id;
    }
    public void setid(Integer id){
        this.id = id;
    }
    public Disciplina getDisciplina_id(){
        return Disciplina_id;
    }
    public void setDisciplina_id(Disciplina Disciplina_id){
        this.Disciplina_id = Disciplina_id;
    }
    public Professor getProfessor_id(){
        return Professor_id;
    }
    public void setProfessor_id(Professor Professor_id){
        this.Professor_id = Professor_id;
    }
    public String getnome(){
        return nome;
    }
    public void setnome(String nome){
        this.nome = nome;
    }            
}

Minha classe Disciplina:

package hibernate;

public class Disciplina {

    private Integer id;
    private Curso   Curso_id;
    private String  nome;
    private String  ementa;
    
    public Integer getid(){
        return id;
    }
    public void setid(Integer id){
        this.id = id;
    }
    public Curso getCurso_id(){
        return Curso_id;
    }
    public void setCurso_id(Curso Curso_id){
        this.Curso_id = Curso_id;
    }
    public String getnome(){
        return nome;
    }
    public void setnome(String nome){
        this.nome = nome;
    }
    public String getementa(){
        return ementa;
    }
    public void setementa(String ementa){
        this.ementa = ementa;
    }
}

O mapeamento de Turma:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
       PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
<hibernate-mapping>
    
	<class name="hibernate.Turma">
            
            <id name="id">
                <generator class="increment"/>
            </id>
            
            <property name="nome"/>
            
            <many-to-one
                name="professor"
                class="hibernate.Professor"
                column="Professor_Pessoa_id"/>
                
            <many-to-one
                name="disciplina"
                class="hibernate.Disciplina"
                column="Disciplina_id"/>
            
            <set name="alunos"
                table="Turma_has_Aluno">

                <key column="Turma_id"/>
                <many-to-many
                    class="hibernate.Aluno"
                    column="Aluno_Pessoa_id"/>
            </set>
            
    </class>
    
</hibernate-mapping>

E o mapeamento de Disciplina:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
       PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

	<class name="hibernate.Disciplina">

		<!-- Identificador da classe -->
		<id name="id">
		 <generator class="increment"/>
		</id>
		
		<!-- Propriedades da classe -->		
		<property name="nome"/>
                <property name="ementa"/>
		
                <set name="turma"
		   inverse="true">
                   <key column="Disciplina_id"/>
                   <one-to-many class="hibernate.Turma"/>
		</set>
                
                                			
	</class>
</hibernate-mapping>

Será que alguem pode me ajudar ?

6 Respostas

RobsonFagundes

humm luisbizzan ja fiz este trabalho
cara pelo q conferi aki com os meus HBM parece q o erro esta no
Disciplina.HBM veja o meu como esta
o da turma esta = ao meu
espero q ajude t+

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

<!DOCTYPE hibernate-mapping 
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

	<class name="beans.Disciplina">
		
		<id name="id">
			<generator class="increment"/>
		</id>
		
		<property name="ementa"/>
		<property name="nome"/>
		
		<set name="turmas"
			 inverse="true">
		
			<key column="Disciplina_id"/>
			<one-to-many class="beans.Turma"/>
		
		</set>
		
		<many-to-one 
				name="curso"
				class="beans.Curso"
				column="Curso_id"/>
		
	</class>

</hibernate-mapping>
Jair_Rillo_Junior

Eu não analisei o seu código, porém se você está começando com associações em Hibernate, aconselho ler esse site: http://www.xylax.net/hibernate/.

Outro detalhe que o pessoal que está começando se confunde.
Existe diferença entre um relacionamento OneToMany unidirecional e bidirecional, portanto, aconselho estudar ambos :slight_smile:

De resto, bons estudos.

N

A mensagem é bem direta e indica seu problema.

Você não tem um método “getTurma()” na sua classe “Disciplina”.

Adiciona este código na classe Disciplina:

...
private Turma turma;
...
public Turma getTurma() {
    return turma;
}

public void setTurm(Turma turma) {
    this.turma = turma;
}

Isso resolve seu mapeamento, mas talvez seu modelo esteja meio estranho porque assim uma displina seria “ministrada” (tem relação) com somente uma turma. Não conheço o domínio do problema, mas em outras situações a disciplina seria ministrada para várias turmas.

Abraço

luisbizzan

Hum intendi Sandro obrigado, eu não sabia que na classe, vc tinha que criar um metodo que buscasse a outra classe tb, pra mim era so a coluna de referencia no caso a coluna id. Obrigado pela ajuda, estou corrigindo o projeto aqui, caso haja mais alguma duvida eu posto. Obrigado a todos que responderam.

luisbizzan

Galera apos corrigir minhas classes gerou o seguinte erro:

Mas aparentemente minha classe pessoa esta correta:

package hibernate;

public class Pessoa {
    
    private Integer id;
    private String nome;
    private String email;
    private String telefone;
    private Endereco endereco;
    
    public String getnome() {
	return nome;
    }
    public void setnome(String nome) {
        this.nome = nome;
    }
    public String getemail(){
        return email;
    }
    public void setemail(String email){
        this.email = email;
    }
    public String gettelefone(){
        return telefone;
    }
    public void settelefone(String telefone){
        this.telefone = telefone;
    }
    public Endereco getendereco(){
        return endereco;        
    }
    public void setendereco(Endereco endereco){
        this.endereco = endereco;
    }
    public Integer getid(){
        return id;
    }
    public void setid(Integer id){
        this.id = id;
    }            
}

e meu mapeamento

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE hibernate-mapping 
       PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;

&lt;hibernate-mapping&gt;

	&lt;class name="hibernate.Pessoa"&gt;

		&lt;!-- Identificador da classe --&gt;		
		&lt;id name="id"&gt;
		 &lt;generator class="increment"/&gt;
		&lt;/id&gt;
		
		&lt;!-- Propriedades da classe --&gt;		
		&lt;property name="nome"/&gt;
                &lt;property name="telefone"/&gt;
                &lt;property name="email"/&gt;
		
		&lt;!-- Relacionamento da classe --&gt;		
		&lt;one-to-one
			name="endereco"
			class="hibernate.Endereco"
			cascade="save-update"/&gt;
			
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;

Oque pode estar ocorrendo ?

luisbizzan

Pessoal fiz algumas alterações na minha classe e meu mapeamento mas ainda ocorre o problema?

Minha Classe:

package smarhibernate;

public class Pessoa {
	
	private Integer id;
	private String nome;
	private String email;
	private String telefone;
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}

	public Integer getId() {
		return id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getTelefone() {
		return telefone;
	}
	
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
}

Meu mapeamento :

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE hibernate-mapping
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
	
&lt;hibernate-mapping&gt;
	
	&lt;class name="smarhibernate.Pessoa"&gt;
	
		&lt;!-- Identificador da classe --&gt;
		&lt;id name="id" column="id"&gt;
			&lt;generator class="increment"/&gt;
		&lt;/id&gt;
		
		&lt;!-- Propriedades da classe --&gt;
		&lt;property name="nome"/&gt;
		&lt;property name="telefone"/&gt;
		&lt;property name="email"/&gt;
	
		&lt;!-- Relacionamento da classe --&gt;
		&lt;one-to-one
			name="endereco"
			class="smarhibernate.Endereco"
			cascade="save-update"
		/&gt;

	&lt;/class&gt;
	
&lt;/hibernate-mapping&gt;

Como esta acima eu tenho o metodo getId, não sei onde possa estar errando nessa parte.
Será que alguem pode me ajudar ?

Criado 10 de março de 2009
Ultima resposta 11 de mar. de 2009
Respostas 6
Participantes 4