Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要遍历的节点在hibernate中不能为null异常_Java_Spring_Hibernate - Fatal编程技术网

Java 要遍历的节点在hibernate中不能为null异常

Java 要遍历的节点在hibernate中不能为null异常,java,spring,hibernate,Java,Spring,Hibernate,我一直在使用spring和hibernate尝试CRUD操作,但出现以下异常 java.lang.IllegalArgumentException: node to traverse cannot be null! at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:64) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Fina

我一直在使用spring和hibernate尝试CRUD操作,但出现以下异常

java.lang.IllegalArgumentException: node to traverse cannot be null!
    at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:64) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:300) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
    at com.kimaya.webpanel.dao.MenuDAOImpl.getMenu(MenuDAOImpl.java:51) ~[MenuDAOImpl.class:na]
    at com.kimaya.webpanel.dao.MenuDAOImpl.removeMenu(MenuDAOImpl.java:87) ~[MenuDAOImpl.class:na]
    at com.kimaya.webpanel.service.MenuServiceImpl.removeMenu(MenuServiceImpl.java:48) ~[MenuServiceImpl.class:na]
    at com.kimaya.webpanel.web.controller.MenuController.removeMenu(MenuController.java:70) ~[MenuController.class:na]
java.lang.IllegalArgumentException:要遍历的节点不能为null!
在org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:64)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:300)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomfile(QueryTranslatorImpl.java:203)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
在com.kimaya.webpanel.dao.MenuDAOImpl.getMenu(MenuDAOImpl.java:51)~[MenuDAOImpl.class:na]
在com.kimaya.webpanel.dao.MenuDAOImpl.removemon(MenuDAOImpl.java:87)~[MenuDAOImpl.class:na]
在com.kimaya.webpanel.service.MenuServiceImpl.removemon(MenuServiceImpl.java:48)~[MenuServiceImpl.class:na]
在com.kimaya.webpanel.web.controller.MenuController.removemon(MenuController.java:70)~[MenuController.class:na]
这是我的MenudaImpl课程

package com.kimaya.webpanel.dao;


import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.kimaya.webpanel.model.Menu;
import com.kimaya.webpanel.model.User;

@Repository("menuDAO")
public class MenuDAOImpl implements MenuDAO {

    protected static Logger logger = LoggerFactory.getLogger(MenuDAO.class);

    @Autowired
    protected SessionFactory sessionFactory;


    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void addMenu(Menu menu) {
        Session session = sessionFactory.openSession();
        String parentmenu = menu.getMenuname();
        String menuname[] = menu.getMenuname().split(" ");
        int parentid = Integer.parseInt(menuname[0]);
        //Query q = session.createQuery("from "+Menu.class.getName()+" where menuname="+menu.getMenuname());
        menu.setParentid(parentid);
        String mname[] = parentmenu.split(",");
        menu.setMenuname(mname[1]);
        session.save(menu);
    }

    public Menu getMenu(Integer menuid) {
        Session session=null;
        Transaction transaction = null;
        List<Menu> menus = null;
        try{
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            Query q = session.createQuery("from" + Menu.class.getName() + "where menuid="+menuid);
             menus = q.list();
             return menus.get(0);
        }
        catch(HibernateException e) {
            transaction.rollback();
        } finally {
            session.close();
        }
        return menus.get(0);

    }

    public void updateMenu(Menu menu) {
        Session session = sessionFactory.openSession();
        session.update(menu);
    }



    public List<Menu> menuList(){
        Session session = sessionFactory.openSession();
        //Query q = session.createQuery("select g from " + Menu.class.getName() + " g");
        //List<Menu> menulist = q.list();

        List<Menu> menulist = session.createQuery("from "+Menu.class.getName()).list();

        return menulist;
    }

    public void removeMenu(Integer menuid) {
        Session session = null;
        Transaction transaction = null;
        try {
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            session.delete(this.getMenu(menuid));
            transaction.commit();
        } catch(HibernateException e) {
            transaction.rollback();
        } finally {
            session.close();
        }   
    }

}
package com.kimaya.webpanel.dao;
导入java.util.List;
导入org.hibernate.hibernateeexception;
导入org.hibernate.Query;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.Transaction;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Repository;
导入com.kimaya.webpanel.model.Menu;
导入com.kimaya.webpanel.model.User;
@存储库(“menuDAO”)
公共类MenuDAOImpl实现MenuDAO{
受保护的静态记录器Logger=LoggerFactory.getLogger(MenuDAO.class);
@自动连线
受保护的SessionFactory SessionFactory;
public void setSessionFactory(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
公共无效添加菜单(菜单菜单){
Session Session=sessionFactory.openSession();
字符串parentmenu=menu.getMenuname();
字符串menuname[]=menu.getMenuname().split(“”);
int parentid=Integer.parseInt(menuname[0]);
//Query q=session.createQuery(“from”+Menu.class.getName()+”其中menuname=“+Menu.getMenuname());
menu.setParentid(parentid);
字符串mname[]=parentmenu.split(“,”);
menu.setMenuname(mname[1]);
会话保存(菜单);
}
公共菜单getMenu(整数菜单UID){
会话=空;
事务=空;
列表菜单=空;
试一试{
session=sessionFactory.openSession();
事务=session.beginTransaction();
Query q=session.createQuery(“from”+Menu.class.getName()+”其中menuid=“+menuid”);
菜单=q.list();
返回菜单。获取(0);
}
捕获(休眠异常e){
transaction.rollback();
}最后{
session.close();
}
返回菜单。获取(0);
}
公共无效更新单元(菜单){
Session Session=sessionFactory.openSession();
会话。更新(菜单);
}
公共列表菜单列表(){
Session Session=sessionFactory.openSession();
//Query q=session.createQuery(“从”+菜单.class.getName()+“g”中选择g”);
//List menulist=q.List();
List menulist=session.createQuery(“from”+Menu.class.getName()).List();
返回菜单列表;
}
公共无效删除菜单(整数菜单ID){
会话=空;
事务=空;
试一试{
session=sessionFactory.openSession();
事务=session.beginTransaction();
删除(this.getMenu(menuid));
commit();
}捕获(休眠异常e){
transaction.rollback();
}最后{
session.close();
}   
}
}
我无法理解为什么会出现这种异常以及如何解决它。 请帮帮我


提前谢谢

这个问题很明显

Query q = session.createQuery("from" + Menu.class.getName() + "where menuid="+menuid);
你错过了空间。请使用参数。例如,在大多数情况下,参数化查询具有更好的性能(并且没有SQL注入)


发生这种类型的问题只是因为语法错误。下面显示了一个示例

如果您在第条中缺少,那么也会发现相同的问题

错误查询-

String query=" user where lid=? and lmt=?";
正确查询-

String query="from user where lid=? and lmt=?";

它是如何复制的?你应该google
java.lang.IllegalArgumentException:要遍历的节点不能为空这里有很多关于各种原因的链接,其中一些应该可以帮助你。谢谢,帮助了我
String query="from user where lid=? and lmt=?";