Problema com mapeamento com hibernate N x N

3 respostas
G

Pessoal, o meu mapeamento com hibernate esta apresentando erro:

Error que aparece no console:
...
21:48:38,496 DEBUG AbstractEntityPersister:2756 -  Delete 0: /* delete model.Pessoa */ delete from pessoa where id=?
01/11/2008 21:48:38 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.hibernate.PropertyNotFoundException: Could not find a getter for turmas in class model.Aluno
	at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:282)
	at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)
	at org.hibernate.mapping.Property.getGetter(Property.java:272)
...

classe aluno:

public class Aluno extends Pessoa implements Serializable{
	private String matricula;
	private Collection turmas;
...
 metodos get e set
...
Aluno.hbm.xml:
<hibernate-mapping package="model">
	<joined-subclass name="Aluno" extends="Pessoa" table="aluno">
		<key column="pessoa_id" />
		<property name="matricula" />
		<set name="turmas" table="turma_has_aluno">
			<key column="aluno_pessoas_id" />
			<many-to-many class="Turma" column="turma_id" />
		</set>
	</joined-subclass>
</hibernate-mapping>
classe Turma:
public class Turma implements Serializable{
	private int id;
	private String nome;
	private Disciplina disciplina;
	private Professor professor;
	private Collection alunos;
 ...
 metodos get e set
...
Turma.hbm.xml
<hibernate-mapping package="model">
	<class name="Turma" table="turma">
		<id name="id" column="id">
			<generator class="native">
				<param name="sequence">seq_turma</param>
			</generator>
		</id>
		<property name="nome"></property>
		<many-to-one name="professor" class="Professor"
			column="professor_pessoa_id" />
		<many-to-one name="disciplina" class="Disciplina"
			column="disciplina_id" />
		<set name="alunos" table="aluno_has_turma">
			<key column="turma_id" />
			<many-to-many class="Aluno" column="aluno_pessoa_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping>
SQL:
CREATE TABLE Aluno (
  Pessoa_id INTEGER UNSIGNED NOT NULL,
  matricula VARCHAR(255) NULL,
  PRIMARY KEY(Pessoa_id),
    FOREIGN KEY(Pessoa_id)
    REFERENCES Pessoa(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE Turma (
  id INTEGER NOT NULL default nextval('seq_turma'),
  Disciplina_id INTEGER  NOT NULL,
  Professor_Pessoa_id INTEGER  NOT NULL,
  nome VARCHAR(255) NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(Professor_Pessoa_id)
    REFERENCES Professor(Pessoa_id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(Disciplina_id)
    REFERENCES Disciplina(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE Turma_has_Aluno (
  Turma_id INTEGER NOT NULL,
  Aluno_Pessoa_id INTEGER  NOT NULL,
  PRIMARY KEY(Turma_id, Aluno_Pessoa_id),
   FOREIGN KEY(Turma_id)
    REFERENCES Turma(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(Aluno_Pessoa_id)
    REFERENCES Aluno(Pessoa_id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)

Esses codigo e o do exemplo do tutorial hibernate 3 do proprio GUJ. Esse error acontence quando eu vou utilizar uma pagina jsf para criar um novo curso(O error não é com o mapeamento do curso, pois só dá esse error quando eu adiciono o mapeamento NxN de aluno com turma).
Alguem poderia olhar se encontra algum erro?

3 Respostas

jorgefrancisco

Olá Amigo

Confira se a sua classe Aluno possui realmente um get para turmas, e se o mesmo está correto… lembrando que a nomenclatura deve seguir o padrão JavaBeans…

Abraços!

G

Cara, deu certo era unicamente um s os metodos estava getTurma e setTurma e pra ser getTumas e setTurmas. valeu pela dica.

luisbizzan

Cara to com um problema parecido: 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:

&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.Turma"&gt;
            
            &lt;id name="id"&gt;
                &lt;generator class="increment"/&gt;
            &lt;/id&gt;
            
            &lt;property name="nome"/&gt;
            
            &lt;many-to-one
                name="professor"
                class="hibernate.Professor"
                column="Professor_Pessoa_id"/&gt;
                
            &lt;many-to-one
                name="disciplina"
                class="hibernate.Disciplina"
                column="Disciplina_id"/&gt;
            
            &lt;set name="alunos"
                table="Turma_has_Aluno"&gt;

                &lt;key column="Turma_id"/&gt;
                &lt;many-to-many
                    class="hibernate.Aluno"
                    column="Aluno_Pessoa_id"/&gt;
            &lt;/set&gt;
            
    &lt;/class&gt;
    
&lt;/hibernate-mapping&gt;

E o mapeamento de Disciplina:

&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.Disciplina"&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="ementa"/&gt;
		
                &lt;set name="turma"
		   inverse="true"&gt;
                   &lt;key column="Disciplina_id"/&gt;
                   &lt;one-to-many class="hibernate.Turma"/&gt;
		&lt;/set&gt;
                
                                			
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;

Será que alguem pode me ajudar ?

Criado 1 de novembro de 2008
Ultima resposta 10 de mar. de 2009
Respostas 3
Participantes 3