Pessoal,
Tenho o seguinte cenário: um Usuário possui várias Mensagens, por sua vez, a Mensagem possui um único Usuário, perfeito? Tentei mapear esse relacionamento para o Hibernate, mas na hora de por pra rodar, acontece certos problemas de acordo com o mapeamento abaixo:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="br.com.carona.web.vo.pessoa.Pessoa" table="PESSOA">
<id name="idPessoa" column="idPessoa" type="integer">
<generator class="identity" />
</id>
<property name="nome" column="nome" not-null="true" type="string" length="200" />
<property name="dtNascimento" column="dtNascto" not-null="true" type="date" />
<property name="rg" column="rg" not-null="false" type="string" length="15" />
<property name="cpf" column="cpf" not-null="false" type="string" length="11" />
<property name="celular" column="dcCelular" not-null="false" type="string" length="15" />
<one-to-one name="endereco"
class="br.com.carona.web.vo.endereco.Endereco"
cascade="all"
foreign-key="idPessoa"
constrained="false" />
<bag name="caronas" table="CARONA_PESSOA" fetch="join">
<key>
<column name="idPessoa" not-null="true" />
</key>
<many-to-many class="br.com.carona.web.vo.carona.Carona" column="idCarona" foreign-key="idCarona" />
</bag>
<joined-subclass name="br.com.carona.web.vo.usuario.Usuario" extends="br.com.carona.web.vo.pessoa.Pessoa" table="USUARIO">
<key column="idPessoa" not-null="true" foreign-key="idPessoa" unique="true" />
<property name="login" column="login" not-null="true" type="string" length="20" />
<property name="senha" column="senha" not-null="true" type="string" length="200" />
<property name="email" column="email" not-null="false" type="string" length="200" />
<property name="ativo" column="flagAtivo" not-null="true" type="byte" />
<property name="dtCadastro" column="dtCadastro" not-null="true" type="date" />
<bag name="menus" table="USUARIO_MENU">
<key>
<column name="idPessoa" not-null="true" />
</key>
<many-to-many class="br.com.carona.web.vo.menu.Menu" column="idMenu" foreign-key="idMenu" />
</bag>
<bag name="mensagens" table="MENSAGEM" cascade="none" lazy="true">
<key column="idPessoa" not-null="true" foreign-key="idPessoa" update="false" />
<one-to-many class="br.com.carona.web.vo.mensagem.Mensagem" not-found="exception" />
</bag>
</joined-subclass>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="br.com.carona.web.vo.mensagem.Mensagem" table="MENSAGEM">
<id name="idMensagem" column="idMensagem" type="integer">
<generator class="identity" />
</id>
<property name="descricao" column="descricao" type="string" not-null="true" length="400" />
<property name="dataEnvio" column="dataEnvio" type="date" not-null="true" />
<one-to-one name="usuario"
class="br.com.carona.web.vo.usuario.Usuario"
cascade="none"
constrained="false"
foreign-key="idPessoa" />
<property name="flagResposta" column="flagResposta" type="byte" not-null="true" />
</class>
</hibernate-mapping>
2º Tentativa de cadastrar uma nova mensagem para o usuário X: ERRO!
Erro:org.hibernate.PropertyAccessException: Exception occurred inside setter of br.com.carona.web.vo.mensagem.Mensagem.usuario
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
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:3566)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
at org.hibernate.loader.Loader.doQuery(Loader.java:729)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:183)
at org.hibernate.collection.PersistentBag.add(PersistentBag.java:274)
at br.com.carona.web.vo.usuario.Usuario.addMensagem(Usuario.java:146)
at br.com.carona.web.vo.mensagem.Mensagem.setUsuario(Mensagem.java:94)
at br.com.carona.web.mbean.faleconosco.FaleConoscoBean.enviarMensagem(FaleConoscoBean.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)
at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)
at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:346)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.carona.web.filter.LoginSessionFilter.doFilter(LoginSessionFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.carona.web.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
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:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
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:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
... 63 more
Caused by: java.lang.IllegalArgumentException: Uma mensagem deve possuir um usuário associado
at br.com.carona.web.vo.mensagem.Mensagem.setUsuario(Mensagem.java:90)
... 68 more