节点到transver can';t不能为空:Hibernate查询提供java.lang.IllegalArgumentException

节点到transver can';t不能为空:Hibernate查询提供java.lang.IllegalArgumentException,hibernate,Hibernate,我试图更新我的表的记录,但当我运行代码时,我得到了这个错误 Hibernate查询提供java.lang.IllegalArgumentException 请帮助解决此问题 这是密码 public void forwardTo(File ob, Person selectedP) { try { //String queryString = "from File "; System.out.println("in dao"

我试图更新我的表的记录,但当我运行代码时,我得到了这个错误 Hibernate查询提供java.lang.IllegalArgumentException 请帮助解决此问题 这是密码

public void forwardTo(File ob, Person selectedP)
    {

        try {
            //String queryString = "from File ";
            System.out.println("in dao");
            System.out.println(ob.getFileRefNo());
            String queryString = "update File f set f.createdPerson="+selectedP.getLogin()+"f.person="+selectedP.getPersonId()+ "where f.fileId="+ob.getFileId();
            System.out.println("after update query");
            Query queryObject = getSession().createQuery(queryString);
            getSession().merge(ob);
            System.out.println("after merge");
            int result=queryObject.executeUpdate();
            System.out.println("Rows affected="+result);
            log.debug("save successful");


        } catch (RuntimeException re) {
            log.error("find all failed", re);
            throw re;
        }
    }
这是错误日志。。。更新外键时会出现

Nov 28, 2014 12:27:23 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.model.um.Person.personId
javax.el.ELException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.model.um.Person.personId
    at org.apache.el.parser.AstValue.invoke(AstValue.java:291)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
    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:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    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:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    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:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.model.um.Person.personId
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:195)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605)
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3321)
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
    at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:93)
    at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:421)
    at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
    at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1169)
    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
    at com.dao.filling.FileDAO.forwardTo(FileDAO.java:284)
    at com.service.filling.FillingDataManager.forawrdTo(FillingDataManager.java:141)
    at com.controller.Controller.forwardTo(Controller.java:179)
    at com.managedBean.Filling.FileMB.forward(FileMB.java:275)
    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:278)
    ... 27 more
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@13aebc8
    at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
    ... 49 more

Nov 28, 2014 12:27:23 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
SEVERE: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.model.um.Person.personId
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:195)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605)
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3321)
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
    at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:93)
    at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:421)
    at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
    at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1169)
    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
    at com.dao.filling.FileDAO.forwardTo(FileDAO.java:284)
    at com.service.filling.FillingDataManager.forawrdTo(FillingDataManager.java:141)
    at com.controller.Controller.forwardTo(Controller.java:179)
    at com.managedBean.Filling.FileMB.forward(FileMB.java:275)
    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:278)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
    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:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    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:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    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:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@13aebc8
    at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
    ... 49 more

首先,您的集合之间需要一个逗号:

String queryString = "update File f set row1 = :row1Parameter, row2 = :row2Parameter where row3 = :row3Parameter";
:参数称为主机变量,需要在语句外部声明,例如:

Query queryObject = getSession().createQuery(queryString);
queryString = "update File f set f.createdPerson = :createdPerson where ...";
queryObject.setParameter("createdPerson", selectedP.getLogin());
int rowsAffected = query.executeUpdate();
希望这有帮助

 String queryString = "update File f set f.createdPerson=" + selectedP.getLogin() + ",f.person=" + selectedP.getPersonId() + " where f.fileId=" + ob.getFileId();

我建议您使用以下代码执行。您的sql语句在字段和where前面的空格之间缺少逗号。

使用
@Transactional
注释,并且您的集合的以下内容之间需要一个逗号:

代码

@Override
@Transactional
public AppUser updateUserToken(AppUser user) {
    try {
        Query query=em.createQuery("update AppUser as u set u.token=:token , u.updatedDate=:updatedDate where u.id=:userId").setParameter("userId", user.getId()).setParameter("token", user.getToken()).setParameter("updatedDate", user.getUpdatedDate());
        query.executeUpdate();
        return user;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

请发布错误日志,以便于识别我所做的这些更改,它对属性“created person”和“fileId”工作正常,但当我更新文件表的“person”属性(外键)时,它会出错。。。org.hibernate.PropertyAccessException:IllegalArgumentException调用com.model.um.Person.personId javax.el.ELException:org.hibernate.PropertyAccessException:IllegalArgumentException调用com.model.um.Person.personId的getter时发生,我有“cascade”更新属性上的值,但在获得此错误后,我将更新属性上的“级联”更改为“无操作”,但错误保持不变。。。如何更新“文件”表中的外键…\\n尝试设置personObject本身,而不是ID,如queryObject.setParameter(“person”,selectedP);Hibernate将理解这是一个外键(因为您的映射),并为您这样做。