Olá a todos!
Estou tentando fazer um cadastro com uma tabela que possui um relacionamento n:n
Para a tabela ‘guarnicao’ criei a seguinte classe:
@Entity
@Table(name = "guarnicao")
public class Guarnicao implements Serializable, Cloneable {
private Integer codigo;
private Date inicioTurno;
private Date terminoTurno;
private String atividade;
private Viatura viatura;
private List<Militar> militares = new ArrayList<Militar>();
//... getters and setters
@ManyToMany
@JoinTable(name = "guarnicao_militar", joinColumns = { @JoinColumn(name = "codigo_guarnicao",
unique = false, nullable = false, insertable = true) },
inverseJoinColumns = { @JoinColumn(name = "codigo_militar",
unique = false, nullable = false, insertable = true) })
public List<Militar> getMilitares() {
return militares;
}
public void setMilitares(List<Militar> militares) {
this.militares = militares;
}
//...
para a tabela ‘militar’ criei a seguinte classe:
@Entity
@Table(name = "militar")
public class Militar implements Serializable, Cloneable {
private Integer codigo;
private String cargo;
private String telefoneCelular;
private String telefoneFixo;
private String nomeCompleto;
private String nomeGuerra;
private String matricula;
private Unidade unidade;
// ... getters and setters
Para selecionar os militares que serão incluídos na tabela relacional criei uma lista de checkbox:
<p:selectManyCheckbox
value="#{cadastroGuarnicaoBean.guarnicao.militares}"
layout="pageDirection" id="militares">
<f:selectItems value="#{cadastroGuarnicaoBean.militares}"
var="militar" itemLabel="#{militar.nomeGuerra}"
itemValue="#{militar.codigo}" />
</p:selectManyCheckbox>
E no maneged bean:
@ManagedBean
public class CadastroGuarnicaoBean {
private Repositorios repositorios = new Repositorios();
private Guarnicao guarnicao = new Guarnicao();
private List<Viatura> viaturas = new ArrayList<Viatura>();
private List<Militar> militares = new ArrayList<Militar>();
@PostConstruct
public void init() {
Viaturas viaturas = this.repositorios.getViaturas();
this.viaturas = viaturas.todos();
Militares militares = this.repositorios.getMilitares();
this.militares = militares.todos();
}
public void salvar() {
GestaoGuarnicoes gestaoGuarnicoes = new GestaoGuarnicoes(
this.repositorios.getGuarnicoes());
gestaoGuarnicoes.salvar(guarnicao);
this.guarnicao = new Guarnicao();
FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO,
"Salvo com sucesso!");
}
public List<Viatura> getViaturas() {
return viaturas;
}
public Guarnicao getGuarnicao() {
return guarnicao;
}
public void setGuarnicao(Guarnicao guarnicao)
throws CloneNotSupportedException {
this.guarnicao = guarnicao;
if (this.guarnicao == null) {
this.guarnicao = new Guarnicao();
} else {
this.guarnicao = (Guarnicao) guarnicao.clone();
}
}
public void setMilitares(List<Militar> militares) {
this.militares = militares;
}
public List<Militar> getMilitares() {
return militares;
}
}
Está carregando todos os militares nos checkboxs, mas quando seleciono os checkboxs e clico em salvar aparece o seguinte erro na console:
23/09/2012 15:29:29 org.hibernate.property.BasicPropertyAccessor$BasicGetter get
ERROR: HHH000122: IllegalArgumentException in class: br.org.siscoweb.model.Militar, getter method of property: codigo
23/09/2012 15:29:29 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: 'org.hibernate.PropertyAccessException' recebido ao invocar escuta de ação '#{cadastroGuarnicaoBean.salvar}' para o componente 'j_idt47'
23/09/2012 15:29:29 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.org.siscoweb.model.Militar.codigo
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:187)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:341)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4425)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4147)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:209)
at org.hibernate.type.EntityType.replace(EntityType.java:283)
at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:496)
at org.hibernate.type.CollectionType.replace(CollectionType.java:563)
at org.hibernate.type.AbstractType.replace(AbstractType.java:178)
at org.hibernate.type.TypeHelper.replaceAssociations(TypeHelper.java:261)
at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:398)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:221)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:900)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:884)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
at br.org.siscoweb.repository.infra.GuarnicoesHibernate.guardar(GuarnicoesHibernate.java:20)
at br.org.siscoweb.service.GestaoGuarnicoes.salvar(GestaoGuarnicoes.java:15)
at br.org.siscoweb.view.CadastroGuarnicaoBean.salvar(CadastroGuarnicaoBean.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at br.org.siscoweb.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:164)
... 57 more
23/09/2012 15:29:29 com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=j_idt30:j_idt47, Message=org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.org.siscoweb.model.Militar.codigo
23/09/2012 15:29:30 com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.org.siscoweb.model.Militar.codigo
javax.faces.event.AbortProcessingException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.org.siscoweb.model.Militar.codigo
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at br.org.siscoweb.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.org.siscoweb.model.Militar.codigo
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:187)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:341)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4425)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4147)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:209)
at org.hibernate.type.EntityType.replace(EntityType.java:283)
at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:496)
at org.hibernate.type.CollectionType.replace(CollectionType.java:563)
at org.hibernate.type.AbstractType.replace(AbstractType.java:178)
at org.hibernate.type.TypeHelper.replaceAssociations(TypeHelper.java:261)
at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:398)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:221)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:900)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:884)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
at br.org.siscoweb.repository.infra.GuarnicoesHibernate.guardar(GuarnicoesHibernate.java:20)
at br.org.siscoweb.service.GestaoGuarnicoes.salvar(GestaoGuarnicoes.java:15)
at br.org.siscoweb.view.CadastroGuarnicaoBean.salvar(CadastroGuarnicaoBean.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
... 31 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:164)
... 57 more
Alguém tem uma idéia de onde pode estar o erro?