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