[RESOLVIDO] JSF 2.0 - Erro ao salvar view

Olá pessoal, sou novo no JSF e estou com um problema que não consigo resolver: Quando tento salvar minha view, gera erro no meu filtro. Se alguém puder me dar alguma dica fico muito agradecido!

Modelos:

Materia

@Entity
@Table(name="materia")
public class Materia implements Serializable {

	private static final long serialVersionUID = 5473593744415728352L;

	@Id
	@GeneratedValue
	private Long id;
	private String materia;

	// getters e setters
	// hash e equals

}

Professor

@Entity
@Table(name="professor")
public class Professor implements Serializable {

	private static final long serialVersionUID = -8859794913996726961L;

	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String endereco;
	private String telefone;
	
	@ManyToMany
	@JoinTable(name="professor_materia", joinColumns={@JoinColumn(name="professor_id")},
			inverseJoinColumns={@JoinColumn(name="materia_id")})
	private List<Materia> materias;

	// getters e setters
	// hash e equals

}

Managed Beans:

Materia


@ManagedBean(name="materiaBean")
@RequestScoped
public class MateriaBean {

	private MateriaRN materiaRN;

	private Materia materia = new Materia();
	private ArrayList<Materia> lista;
	
	public String salvar(){
		materiaRN = new MateriaRN();
		materiaRN.salvar(materia);
		return null;
	}


	public Materia getMateria() {
		return materia;
	}


	public void setMateria(Materia materia) {
		this.materia = materia;
	}


	public List<Materia> getLista() {
		if(this.lista == null){
			materiaRN = new MateriaRN();
			this.lista = (ArrayList<Materia>) materiaRN.listar();
		}
		return this.lista;
	}


	public void setLista(List<Materia> lista) {
		this.lista = (ArrayList<Materia>) lista;
	}
	
	
}

Professor


@ManagedBean(name="professorBean")
@RequestScoped
public class ProfessorBean {

	private Professor professor = new Professor();
	private List<Professor> lista;
	private ProfessorRN professorRN = null;
	
	public String salvar(){
		professorRN = new ProfessorRN();
		this.professorRN.salvar(professor);
		return null;
	}

	public Professor getProfessor() {
		return professor;
	}

	public void setProfessor(Professor professor) {
		this.professor = professor;
	}

	public List<Professor> getLista() {
		if (lista == null){
			professorRN = new ProfessorRN();
			this.lista = professorRN.listar(); 
		}
		return this.lista;
	}

	public void setLista(List<Professor> lista) {
		this.lista = lista;
	}
	
	
}

View:

<h:body>
	<h2>Gerenciamento de Professores</h2>
	<br/>
	&lt;h:form id="cadastro"&gt;
		&lt;h:inputHidden value="#{professorBean.professor.id}"/&gt;
		&lt;h:messages/&gt;
		<br/>
		&lt;h:panelGrid columns="2" cellpadding="5"&gt;
			&lt;h:outputLabel value="Nome:" for="nome"/&gt;
			&lt;p:inputText value="#{professorBean.professor.nome}" id="nome" label="Nome" required="true"/&gt;
		
			&lt;h:outputLabel value="Endereço:" for="endereco"/&gt;
			&lt;p:inputText value="#{professorBean.professor.endereco}" id="endereco" label="Endereço" required="true"/&gt;
			
			&lt;h:outputLabel value="Telefone:" for="telefone"/&gt;
			&lt;p:inputMask value="#{professorBean.professor.telefone}" mask="(99) 9999-9999" size="14"
				id="telefone" label="Telefone" required="true"/&gt;
				
			&lt;h:outputLabel value="Matéria:" for="materia"/&gt;
			&lt;h:selectManyListbox value="#{professorBean.professor.materias}" size="5"&gt;
				&lt;f:selectItems value="#{materiaBean.lista}" var="var" itemLabel="#{var.materia}" itemValue="#{var}"/&gt;
			&lt;/h:selectManyListbox&gt;
				
			&lt;p:commandButton type="reset" value="Limpar"/&gt;
			&lt;p:commandButton action="#{professorBean.salvar}" value="Salvar" ajax="false"/&gt;
		&lt;/h:panelGrid&gt;
	&lt;/h:form&gt;
	<br/><br/>
	&lt;h:form id="lista"&gt;
		&lt;h:dataTable var="professores" value="#{professorBean.lista}" border="1" rules="all" cellpadding="5"&gt;
			&lt;f:facet name="header"&gt;Listagem de Professores&lt;/f:facet&gt;
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;Id&lt;/f:facet&gt;
				#{professores.id}
			&lt;/h:column&gt;
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;Nome&lt;/f:facet&gt;
				#{professores.nome}
			&lt;/h:column&gt;
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;Endereço&lt;/f:facet&gt;
				#{professores.endereco}
			&lt;/h:column&gt;
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;Telefone&lt;/f:facet&gt;
				#{professores.telefone}
			&lt;/h:column&gt;
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;Matérias&lt;/f:facet&gt;
				#{professores.materias}
			&lt;/h:column&gt;
		&lt;/h:dataTable&gt;
	&lt;/h:form&gt;
&lt;/h:body&gt;

Erro:

Hibernate: 
    /* criteria query */ select
        this_.id as id1_0_,
        this_.materia as materia1_0_ 
    from
        materia this_
Nov 21, 2012 1:33:41 PM com.sun.faces.renderkit.html_basic.HtmlBasicRenderer getForComponent
WARNING: Não foi possível encontrar o componente com a ID materia na exibição.
Hibernate: 
    /* insert com.matrix.modelo.professor.Professor
        */ insert 
        into
            professor
            (endereco, nome, telefone, id_turma) 
        values
            (?, ?, ?, ?)
Hibernate: 
    /* criteria query */ select
        this_.id as id2_2_,
        this_.endereco as endereco2_2_,
        this_.nome as nome2_2_,
        this_.telefone as telefone2_2_,
        this_.id_turma as id5_2_2_,
        turma2_.id_turma as id1_3_0_,
        turma2_.turma as turma3_0_,
        turma2_.turno_id as turno3_3_0_,
        turno3_.id as id4_1_,
        turno3_.turno as turno4_1_ 
    from
        professor this_ 
    left outer join
        turma turma2_ 
            on this_.id_turma=turma2_.id_turma 
    left outer join
        turno turno3_ 
            on turma2_.turno_id=turno3_.id
Hibernate: 
    /* insert collection
        row com.matrix.modelo.professor.Professor.materias */ insert 
        into
            professor_materia
            (professor_id, materia_id) 
        values
            (?, ?)
632114 [http-8080-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
	at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3852)
	at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3560)
	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:449)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:132)
	at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:816)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1204)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.matrix.modelo.materia.Materia.id to java.lang.String
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
	at java.lang.reflect.Field.get(Unknown Source)
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
	... 31 more
Nov 21, 2012 1:33:41 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.servlet.ServletException
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:40)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

Ta faltando um elemento com id “materia” na View.
Evite deixar um elemento do back bean “solto”. Exemplo:
ao inves de #{professores.id}
coloque :

<h:outputText value="#{professores.id}"/>

é praticamente a mesma coisa,porem ele renderiza um sobre o texto.
Outra coisa segundo o dialogo de erro,vc esta tentando mudar um tipo long atraves de uma string

Obrigado pela resposta dofun12!

Então, adicionei um inputHidden com materia.id e parou de apresentar o erro relacionado à isso:

<h:inputHidden value="#{materiaBean.materia.id}"/>

No entanto, continua apresentando erro do hibernate e no filtro:

58137 [http-8080-4] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
	at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3852)
	at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3560)
	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:449)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:132)
	at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:816)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1204)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.matrix.modelo.materia.Materia.id to java.lang.String
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
	at java.lang.reflect.Field.get(Unknown Source)
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
	... 31 more
Nov 21, 2012 3:12:14 PM com.sun.faces.renderkit.html_basic.HtmlBasicRenderer getForComponent
WARNING: Não foi possível encontrar o componente com a ID materia na exibição.
Nov 21, 2012 3:12:14 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.servlet.ServletException
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:40)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

Creio que esteja ligado ao h:selectManyListbox, mas não consigo entender o que fazer para corrigir isso. Alguma sugestão?

Substitui :

<h:selectManyListbox value="#{professorBean.professor.materias}" size="5">  
    <f:selectItems value="#{materiaBean.lista}" var="var" itemLabel="#{var.materia}" itemValue="#{var}"/>  
</h:selectManyListbox> 

Por :

<h:selectManyListbox value="#{professorBean.professor.materias}" size="5">  
    <f:selectItems value="#{materiaBean.lista}" var="var" itemLabel="#{var.materia}" itemValue="#{var.id}"/>  
</h:selectManyListbox> 

Porque o “#{professorBean.professor.materias}” e um tipo long,e o itemValue="#{var} e a mesma coisa que o objeto materia em String,dai vem o Erro.

Fiz a alteração mas continua dando erro:

Hibernate: 
    /* criteria query */ select
        this_.id as id1_0_,
        this_.materia as materia1_0_ 
    from
        materia this_
Nov 21, 2012 3:41:33 PM com.sun.faces.renderkit.html_basic.HtmlBasicRenderer getForComponent
WARNING: Não foi possível encontrar o componente com a ID materia na exibição.
Hibernate: 
    /* insert com.matrix.modelo.professor.Professor
        */ insert 
        into
            professor
            (endereco, nome, telefone, id_turma) 
        values
            (?, ?, ?, ?)
Hibernate: 
    /* criteria query */ select
        this_.id as id2_2_,
        this_.endereco as endereco2_2_,
        this_.nome as nome2_2_,
        this_.telefone as telefone2_2_,
        this_.id_turma as id5_2_2_,
        turma2_.id_turma as id1_3_0_,
        turma2_.turma as turma3_0_,
        turma2_.turno_id as turno3_3_0_,
        turno3_.id as id4_1_,
        turno3_.turno as turno4_1_ 
    from
        professor this_ 
    left outer join
        turma turma2_ 
            on this_.id_turma=turma2_.id_turma 
    left outer join
        turno turno3_ 
            on turma2_.turno_id=turno3_.id
Hibernate: 
    /* insert collection
        row com.matrix.modelo.professor.Professor.materias */ insert 
        into
            professor_materia
            (professor_id, materia_id) 
        values
            (?, ?)
469197 [http-8080-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
	at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3852)
	at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3560)
	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:449)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:132)
	at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:816)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1204)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.matrix.modelo.materia.Materia.id to java.lang.String
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
	at java.lang.reflect.Field.get(Unknown Source)
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
	... 31 more
Nov 21, 2012 3:41:33 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.servlet.ServletException
	at com.matrix.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:40)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

Alguém tem mais alguma idéia que possa me ajudar?

Acho que o problema está pode estar no relacionamento entre a classe Professor e Materia, mas não consigo ter nenhuma idéia do que possa ser.

Ninguém?? :?:

Depois da alteração,vc tentou dar Redeploy ou reset no Server?

Sim, dei clean e depois publish no tomcat.

A parte do erro:

137174 [http-8080-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id

e

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.matrix.modelo.materia.Materia.id to java.lang.String

Indicam que é algo relacionado com o Id da classe Materia. Estou buscando o conteúdo do f:selectItems em uma lista (materiaBean.lista), será que é aí que está o problema?

<f:selectItems value="#{materiaBean.lista}" var="var" itemLabel="#{var.materia}" itemValue="#{var.id}"/>

Cara tenta,mudar esse trecho:

 <f:selectItems value="#{materiaBean.lista}" var="var" itemLabel="#{var.materia}" itemValue="#{var}"/>

por:

 <f:selectItem itemLabel="Teste1" itemValue="9999"/>
 <f:selectItem itemLabel="Teste2" itemValue="9999"/>

e veja se funciona

Fiz a alteração, colocando no caso o itemLabel e o itemValue correspondentes ao que já existe gravado na tabela Materia no banco de dados:

<f:selectItem itemLabel="matematica" itemValue="1"/>
<f:selectItem itemLabel="geografia" itemValue="2"/>

Mas continua dando o mesmo erro.

227386 [http-8080-4] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.matrix.modelo.materia.Materia.id to java.lang.String

Definitivamente parece que o Hibernate não consegue pegar o id de Materia e porquê ele não consegue converter de Long para String. Teria que colocar um conversor alí? Como ficaria?

Valeu pela atenção na ajuda!!

Mostre a parte de conexao com o banco(DAO),talvez o problema possa ser la

HibernateUtil:

public class HibernateUtil {

	private static final SessionFactory sessionFactory = buildSessionFactory();
	private static SessionFactory buildSessionFactory(){
		try{
			AnnotationConfiguration config = new AnnotationConfiguration();
			config.configure("hibernate.cfg.xml");
			return config.buildSessionFactory();
		}catch(Throwable e){
			System.out.println("Criação inicial de SessionFactory falhou. \nErro: " + e.getMessage());
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public static SessionFactory getSessionfactory() {
		return sessionFactory;
	}
}

E o filtro que aciona o hibernate:

public class ConexaoHibernateFilter implements Filter {

	private SessionFactory sf;
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		try{
			this.sf.getCurrentSession().beginTransaction();
			chain.doFilter(request, response);
			this.sf.getCurrentSession().getTransaction().commit();
			this.sf.getCurrentSession().close();
		}catch(Throwable e){
			try{
				if(this.sf.getCurrentSession().getTransaction().isActive()){
					this.sf.getCurrentSession().getTransaction().rollback();
				}
			}catch(Throwable t){
				t.printStackTrace();
			}
			throw new ServletException();
		}
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		this.sf = HibernateUtil.getSessionfactory();		
	}

}

Poderia postar a parte em que tem as Querys para insercao e select do Professor e Materia?

Quando tento salvar o Hibernate gera as queries:

Hibernate: 
    /* insert com.matrix.modelo.professor.Professor
        */ insert 
        into
            professor
            (endereco, nome, telefone) 
        values
            (?, ?, ?)
Hibernate: 
    /* insert collection
        row com.matrix.modelo.professor.Professor.materias */ insert 
        into
            professor_materia
            (professor_id, materia_id) 
        values
            (?, ?)

aí dá o erro:

1926645 [http-8080-2] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.matrix.modelo.materia.Materia.id

O Problema pode ser na lista,que vc pega da classe ProfessoresRN

a lista de Materia eu chamo do backing bean MateriaBean:

	public List<Materia> getLista() {
		if(this.lista == null){
			materiaRN = new MateriaRN();
			this.lista = (ArrayList<Materia>) materiaRN.listar();
		}
		return this.lista;
	}

que chama o MateriaRN:

	public MateriaRN() {
		this.materiaDAO = DAOFactory.criarMateriaDAO();
	}

que por sua vez chama da classe que chama diretamente no DAO:

	public List<Materia> listar() {
		return this.session.createCriteria(Materia.class).list();
	}

Me desculpe,mas não sei como te ajudar… :?

Vlw dofun12, obrigado pela força!

Estou quebrando a cabeça, se conseguir resolver posto aqui.

cnidhogg,

Provavelmente tu vai ter que implementar um conversor para esse h:selectManyListbox. Até onde sei, ele sempre vai te retornar uma String no itemValue dele. Nesse caso tu deve converter essa String para o tipo que você quer. No teu caso um Long. Tenta usar o conversor pra Long do próprio JSF (LongConverter) ou tenta criar esse conversor:

[code]public class LongConverter {

@Override
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
    if (value != null) {
        try {
            return Long.valueOf(value);
        } catch (NumberFormatException e) {
            return null;
        }
    }

    return null;
}

@Override
public String getAsString(FacesContext ctx, UIComponent component, Object value) {
    if (value != null) {
        return value.toString();
    }

    return "";
}

}[/code]

Depois coloca o conversor na tua lista e ve se resolve.