Occurred while calling setter of Bean.Aluno.disciplinas

2 respostas
W

Pessoal tenho duas tabelas relacionada entre si sao elas : aluno e disciplina o relacionamento e muitos para muitos o que faz surgi a terceira tabela aluno_disciplina, como voces vere os scripts:
aluno;

public class Aluno   {


     private Integer idaluno;
     private String nome;
     private String endereco;
     private String sexo;
     private String nomepai;
     private String nomemae;
     private String resposavel;
     private String nacionalidade;
     private String naturalidade;
     private String uf;
     private String municipio;
     private Escola escola;
     private String datanascimento;
     private Integer telefone;
     private String resistro;
     private Turma turma;
    private Disciplina disciplina;
     private List<Disciplina> disciplinas;
//gettes / setteres

Aluno.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 06/10/2011 07:17:14 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="Bean.Aluno" table="aluno" catalog="sge">
        <id name="idaluno" type="java.lang.Integer">
            <column name="idaluno" />
            <generator class="native" />
        </id>
  
        <property name="nome" type="string">
            <column name="nome" length="45" />
        </property>
        <property name="endereco" type="string">
            <column name="endereco" length="45" />
        </property>
        <property name="sexo" type="string">
            <column name="sexo" length="1" />
        </property>
        <property name="nomepai" type="string">
            <column name="nomepai" length="45" />
        </property>
        <property name="nomemae" type="string">
            <column name="nomemae" length="45" />
        </property>
        <property name="resposavel" type="string">
            <column name="resposavel" length="45" />
        </property>
        <property name="nacionalidade" type="string">
            <column name="nacionalidade" length="45" />
        </property>
        <property name="naturalidade" type="string">
            <column name="naturalidade" length="45" />
        </property>
        <property name="uf" type="string">
            <column name="uf" length="2" />
        </property>
        <property name="municipio" type="string">
            <column name="municipio" length="45" />
        </property>
        <property name="datanascimento" type="string">
            <column name="datanascimento" length="8" />
        </property>
        <property name="telefone" type="int">
            <column name="telefone" length="10" />
        </property>
        <property name="resistro" type="string">
            <column name="resistro" length="20" />
        </property>
        
      <set name="disciplinas" inverse="false" table="aluno_disciplina">
            <key>
                <column name="idaluno" not-null="true" />
            </key>
            <many-to-many entity-name="Bean.Disciplina">
                <column name="iddisciplina" not-null="true" />
            </many-to-many>
        </set> 
       
    </class>
</hibernate-mapping>
discipina:
public class Disciplina {
	private Integer iddisciplina;
	private String nome;
	private String descricao;
	private List<Aluno> alunos;
	//getteres / setteres
Disciplina.hbm.xml
<?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">
<!-- Generated 06/10/2011 07:17:14 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="Bean.Disciplina" table="disciplina" catalog="sge">
<id name="iddisciplina" type="java.lang.Integer">
<column name="iddisciplina"></column>
<generator class="native">
</generator>
</id>
<property name="nome" type="string">
<column name="nome" length="40"></column>
</property>
<property name="descricao" type="string">
<column name="descricao" length="50"></column>
</property>
    
        <set name="alunos" inverse="true" table="aluno_disciplina">
            <key>
                <column name="iddisciplina" not-null="true" />
            </key>
            <many-to-many entity-name="Bean.Aluno">
                <column name="idaluno" not-null="true" />
            </many-to-many>
        </set>
</class>

</hibernate-mapping>

Na mina pagina jsp para cadastro de aluno quero um o select ja venha carregado com as disciplinas to usando o jsl assim:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cadastro Aluno</title>
</head>
<body>

<div id="container">
<div id="top">
<h1>Cadastror Aluno</h1>
<h3>${mensagem}</h3>
</div>

<div id="leftSide">
<fieldset>
<legend>Aluno</legend>
<form action="Controlador" method="post" class="form"/>
<input type="hidden" name="cmd" id="cmd" value="cadastrarAluno"/>


<label for="nome"> Nome</label>
<div class="div_texbox">
<input type="text" name="nome" id="nome" value="${aluno.nome }"/>
</div>

<label for="endereco">Endereco</label>
<div class="div_texbox">
<input type="text" name="endereco" id="endereco" value="${aluno.endereco}"/>
</div>

<label for="municipio">Municipio</label>
<div class="div_texbox">
<input type="text" name="municipio" id="municipio" value="${aluno.municipio }"/>
</div>
<label for="naturalidade">Naturalidade</label>
<div class="div_texbox">
<input type="text" name="naturalidade" id="naturalidade" value="${aluno.naturalidade}"/>
</div>

<label for="nacionalidade">Nacionalidade</label>
<div class="div_texbox">
<select>
<option  name="nacionalidade" selected="selected">Brasileira</option>
<option name="nacionalidade">Estrangeira</option>
</select>
</div>
<label for="nomemae">Nomemae</label>
<div class="div_texbox">
<input type="text" name="nomemae" id="nomemae" value="${aluno.nomemae}"/>
</div>
<label for="nomepai">Nome Pai</label>
<div class="div_texbox">
<input type="text" name="nomepai" id="nomepai" value="${aluno.nomepai}"/>
</div>
<label for="resposavel">Resposavel</label>
<div class="div_texbox">
<input type="text" name="resposavel" id="resposavel" value="${aluno.resposavel}"/>
</div>
<label for="telefone">Telefone</label>
<div class="div_texbox">
<input type="text" name="telefone" id="telefone" value="${aluno.telefone}"/>
</div>

<label for="resistro">Registro Nº</label>
<div class="div_texbox">
<input type="text" name="resistro" id="resistro" value="${aluno.resistro}"/>
</div>


<label for="datanascimento">Data.Nasc</label>
<div class="div_texbox">
<input type="text" name="datanascimento" id="datanascimento" value="${aluno.datanascimento}"/>
</div>




<label for="iddisciplina">Disciplina</label>
<div class="div_texbox">
<select name="iddisciplina">
<c:forEach var="aluno_disciplina" items="${disciplinas}">
<option value="${aluno_disciplina.iddisciplina.disciplina}" ${aluno_disciplina.iddisciplina.disciplina eq disciplina.aluno_disciplina.iddisciplina.disciplina ? "SELECTED" : ""}>${disciplina.nome}</option>
</c:forEach>
</select>
</div>


<label for="sexo">Sexo</label>
<div class="div_texbox">
<option>M</option>
<input type="radio" name="sexo" id="sexo" value="${aluno.sexo}" />
<option>F</option>
<input type="radio" name="sexo" id="sexo" value="${aluno.sexo}"/>



</div>

<label for="uf">Uf</label>
<div class="div_texbox">
<input type="text" name="uf" id="uf" value="${aluno.uf}"/>
</div>

<div class="button_div">
<input type="submit" name="cadastrar" id="cadastrar" value="Cadastrar"  class="botao"/>
</div>

</form>
</fieldset>
</div>

</div>
</body>
</html>
na hora chamo a minha pagina acontece o seguite:
alunos2_.nome as nome0_0_,
        alunos2_.endereco as endereco0_0_,
        alunos2_.sexo as sexo0_0_,
        alunos2_.nomepai as nomepai0_0_,
        alunos2_.nomemae as nomemae0_0_,
        alunos2_.resposavel as resposavel0_0_,
        alunos2_.nacionalidade as naciona10_0_0_,
        alunos2_.naturalidade as natural11_0_0_,
        alunos2_.uf as uf0_0_,
        alunos2_.municipio as municipio0_0_,
        alunos2_.datanascimento as datanas14_0_0_,
        alunos2_.telefone as telefone0_0_,
        alunos2_.resistro as resistro0_0_,
O erro e esse
[code]org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of Bean.Aluno.disciplinas
	at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
	at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
	at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
	at org.hibernate.loader.Loader.doQuery(Loader.java:729)
[/code]

Alguem poderia me ajudar???

2 Respostas

mauricionarcizo

cara, primeiro para te organizar melhor na construção dos teus beans, usa hibernate annotations, larga de mão dessas XMLs ai, com Hibernate Annotations você usa apenas uma XML para todas as suas beans.

W

Mudei para o annotation :
mas o select no cadastro do aluno na vem carregado com os dados da dsiciplina do banco:

disciplina:
@Entity  
@Table(name = "disciplina")  
public class Disciplina {
    @Id  
    @GeneratedValue
	private Integer iddisciplina;
	private String nome;
	private String descricao;
        @JoinTable(name = "aluno_disciplina", joinColumns = {  
            @JoinColumn(name = "iddisciplina", referencedColumnName = "iddisciplina")}, inverseJoinColumns = {  
            @JoinColumn(name = "idaluno", referencedColumnName = "idaluno")})  
    @ManyToMany(fetch = FetchType.LAZY)  
	private List<Aluno> alunos;

aluno:

@Entity  
@Table(name = "aluno")  
public class Aluno   {

 @Id  
    @GeneratedValue 
     private Integer idaluno;
     private String nome;
     private String endereco;
     private String sexo;
     private String nomepai;
     private String nomemae;
     private String resposavel;
     private String nacionalidade;
     private String naturalidade;
     private String uf;
     private String municipio;
     private String datanascimento;
     private Integer telefone;
     private String resistro;
   
    @ManyToOne
    private Disciplina disciplina;
    @ManyToMany(mappedBy = "alunos", fetch = FetchType.LAZY) 
     private List<Disciplina> disciplinas;
arquivo de configuraçao:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/sge</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password"/>
    <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">5</property>
    <property name="hibernate.c3p0.timeout">300</property>
    <property name="hibernate.c3p0.max_statements">500</property>
    <property name="hibernate.c3p0.idle_test_period">300</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    
   
  
    <!--
    <mapping resource="Bean/Aluno.hbm.xml"/>
    <mapping resource="Bean/Escola.hbm.xml"/>
    <mapping resource="Bean/Turma.hbm.xml"/>
    <mapping resource="Bean/Disciplina.hbm.xml"/>
    -->
    <mapping  class="Bean.Disciplina"/>
   <mapping class="Bean.Aluno"></mapping>	
  </session-factory>
</hibernate-configuration>
arquivo jss e jsp :
<label for="iddisciplina">Disciplina</label>
<div class="div_texbox">
<select name="iddisciplina">
<c:forEach var="aluno_disciplina" items="${disciplina.disciplinas}">
<option value="${aluno_disciplina}" ${aluno_disciplina eq disciplina.aluno_disciplina.iddisciplina? "SELECTED" : ""}>${disciplina.nome}</option>
</c:forEach>
</select>
</div>
Criado 10 de outubro de 2011
Ultima resposta 10 de out. de 2011
Respostas 2
Participantes 2