我对hibernate有一个错误:“无法通过反射getter得到一个字段值”

问题描述 投票:2回答:2

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field service.model.Setor.id to java.lang.String

我尝试更改ID列类型,但它不起作用。我在社区和其他论坛中研究了其他案例,但没有任何案例适用于我的问题作为解决方案。如果有人能看到我出错的地方,我决定上诉。也许在某些@NamedQuery中...我不知道。

U素a Rio.Java

@XmlRootElement
@Entity
@Table(name = "usuario")
@NamedQueries({
    @NamedQuery(name = "Usuario.buscarPorId", query = "SELECT usuario FROM Usuario usuario "
        + "WHERE usuario.id = :id"),
    @NamedQuery(name = "Usuario.listar", query = "SELECT usuario FROM Usuario usuario")})
public class Usuario {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "usuarioSequence")
    @SequenceGenerator(name="usuarioSequence", sequenceName="usuarioSequence")
    @Column(name = "id")
    private int id;

    @Column(name = "nome", length = 200, nullable = false)
    private String nome;

    @Column(name = "login", length = 200, nullable = false)
    private String login;

    @Column(name = "senha", length = 200, nullable = false)
    private String senha;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(name = "usuario_setor",
        joinColumns = { @JoinColumn(name = "usuario_id", referencedColumnName="id") },
        inverseJoinColumns = { @JoinColumn(name = "setor_id", referencedColumnName="id") }
    )
    private Collection<Setor> setores;
    ...
}

set or.Java

@XmlRootElement
@Entity
@Table(name = "setor")
@NamedQueries({
    @NamedQuery(name = "Setor.buscarPorId", query = "SELECT setor FROM Setor setor "
    + "WHERE setor.id = :id"),
    @NamedQuery(name = "Setor.listar", query = "SELECT setor FROM Setor setor")
})
public class Setor {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "setorSequence")
    @SequenceGenerator(name="setorSequence", sequenceName="setorSequence")
    @Column(name = "id")
    private Integer id;

    @Column(name = "descricao", length = 200, nullable = false)
    private String descricao;

    @OneToMany(mappedBy="setorOrigem")
    private List<Documento> documentos = new ArrayList<Documento>();;

    @ManyToMany(mappedBy = "setores")
    private Collection<Usuario> usuarios;
...
}

U素a Rio bean.Java

public void salvar() {
    try {
        UsuarioDAO usuarioDAO = new UsuarioDAO();
        usuarioDAO.salvar(usuarioCadastro);
        usuarioCadastro = new Usuario();

        FacesUtil.adicionarMsgInfo("Usuario salvo com sucesso!");
    } catch (RuntimeException ex){
        ex.printStackTrace();
        FacesUtil.adicionarMsgErro("Erro ao tentar incluir um usuario: " + ex.getMessage());
    }
}

U素a Rio DAO.Java

public void salvar(Usuario usuario){
    Session sessao = HibernateUtil.getSessionFactory().openSession();
    Transaction transacao = null;

    try{
        transacao = sessao.beginTransaction();
        sessao.save(usuario);
        transacao.commit();
    } catch (RuntimeException ex) {
        if(transacao != null) {
            transacao.rollback();
        }

        throw ex;
    } finally {
        sessao.close();
    }
}

堆栈跟踪

Hibernate: 
select
    nextval ('usuarioSequence')
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of service.model.Setor.id
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:60)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:243)
at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:511)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:100)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676)
at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:235)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:379)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:319)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:296)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:460)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:294)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
at dao.UsuarioDAO.salvar(UsuarioDAO.java:19)
at controller.UsuarioBean.salvar(UsuarioBean.java:50)
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:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
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:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field service.model.Setor.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:57)
... 70 more
Hibernate: 
select
    setor0_.id as id1_1_,
    setor0_.descricao as descrica2_1_ 
from
    setor setor0_
hibernate many-to-many
2个回答
1
投票

看起来你的类型不匹配。源例外是:

Can not set java.lang.Integer field service.model.Setor.id to java.lang.String

检查你的getter和setter方法。


0
投票

我通过创建一个转换为Setor.java解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.