当前位置: 首页 > 知识库问答 >
问题:

Hibernate在MySQL的SQL语法中生成错误

莫承运
2023-03-14

尝试使用 HQL 从表中获取记录时出现错误

原因:com . Mysql . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:您的SQL语法有错误;请查阅与您的MySQL服务器版本相对应的手册,了解使用near '的正确语法。userinfo userinfo 0 _ where userinfo 0 _。login_id='muskan '和userinfo0_。pwd='musk '在1号线

完整错误跟踪:

来自Userinfo Userinfo,其中Userinfo。loginId='muskan'和userinfo.pwd='muskan@admin'和用户信息。role=线程“main”org.hibernate.Exception中的“管理员”异常。SQLGrammarException:无法在org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)处的org.hibernae.exception.JDBCExceptionHelper.convertorg.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslator impl.java:363),位于org.hibernae.engine.query.HQLQueryLoader.list(QueryLoader.java:452),位于com.ovs.domain.UserDAO.validateUser(UserDAO.java:16)在com.ovs.action.LognTest.main(LoginTest.java:17)原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以了解使用near的正确语法。userinfo userinfo0_其中userinfo0_。login_id='muskan'和userinfo0_。pwd='musk',位于sun.reflect.NativeConstructorAccessorImpl的第1行。sun.reflect.NativeConstructorAccessorImpl处的newInstance0(本机方法)。sun.reflect.DelegatingConstructorAccessorImpl处的newInstance(未知源)。newInstance(未知源)位于java.lang.reflect.Cructor。位于com.mysql.jdbc.Util.handleNewInstance(Util.java:406)的newInstance(未知源)位于com.mysql.jdbc.Util.getInstance(Util.java:381)的com.mysql.jabd.SQLError.createSQLException(SQLError.java:1030)位于com.mysql.jdbd.SQLError.createSQLExceptioncom.mysql.jdbc.AbstractBatcher.getResultSet上的com.mysql.jjdbc.MysqlIO.sendCommand(MyqlIO.java:1959)位于com.mysql.jbc.MysqlIO.sqlQueryDirect(Myqlio.java:2109)的com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2643(AbstractBatcher.java:208)位于org.hibernate.loader.loader.getResultSet(loader.java:1869),位于org.hibernate.loader.loader.doQuery(loader.java.718),位于org hibernate.loader.loader.loader.doQueryAndInitializeNonLazyCollection(loader.java:270),位于org.hhibernate.loloader.loader.doList(loader.java:2449)…9更多

表格结构:

CREATE TABLE `userinfo` (
  `login_id` varchar(10) NOT NULL,
  `pwd` varchar(15) NOT NULL,
  `role` varchar(15) NOT NULL,
  `lastlogon` bigint(20) NOT NULL,
  PRIMARY KEY  (`login_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Hibernate设置:

<name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

Java代码:

String query="from Userinfo userinfo where userinfo.loginId='"+userinfo.getLoginId()+"' and userinfo.pwd='"+ userinfo.getPwd()+
                      "' and userinfo.role='"+userinfo.getRole()+"'";   
        Query validateUserQuery= getsession().createQuery(query);

        System.out.print(validateUserQuery.getQueryString());
        List<Userinfo> result = validateUserQuery.list();

共有2个答案

于鹏
2023-03-14

如果您能显示“Userinfo”实体类或XML,那就太好了。在查询中,您可以使用参数,这样您的字符串看起来会更好,并保护自己免受SQL注入。

String query="from Userinfo u where u.loginId = :loginId"
Query validateUserQuery= getsession().createQuery(query);
validateUserQuery.setParameter("loginId",userinfo.getLoginId());
魏安宁
2023-03-14

您应该尝试更改您的查询userinfo.loginIDuserinfo.login_id

 类似资料:
  • 问题内容: 我的Java代码出现此错误 这是hibernate传递的查询: 我已经查看了与此错误有关的所有问题。但是在所有这些问题中,用户本身都在传递查询“ ”,因此他们可以将“ ” 更改为“ ”,但是hibernate在这里负责创建表,因此我不知道错误在哪里以及如何解决。 这是我的配置文件: 这是我的映射文件: 这是我的课程文件: 问题答案: 问题是该方言适用于MySQL 4.x或更早版本。由该

  • 问题内容: 我从数据库中删除记录时遇到问题。几个小时以来,我一直在努力弄清自己在做错什么。我在这里搜索了一些主题,但没有一个回答我在做什么错。我在数据库中制作了这3个表: 这是我的hibernate映射文件: 因此,当我尝试从jTable中删除一条记录时,它给了我一个错误。这是我用来从jTable和数据库中删除数据的代码: ServiceCheck.java 这是错误: 任何帮助将不胜感激! 问题

  • 我是Hibernate新手,所以我对此一无所知。Hibernate会生成SQL查询并在数据库上触发。 我能够从控制台检索查询,但我也希望在触发查询之前对其进行修改。 因此,如果查询为:

  • 我的Java代码出现了这个错误 这是Hibernate传递的查询: 我已经看过与这个错误有关的所有问题。但是在所有这些问题中,用户本身传递查询“”,这样他们就可以将“”更改为“”,但是这里hibernate负责创建表,所以我不明白错误在哪里,以及如何修复它。

  • 用户 角色 Application.Properties

  • 我是MySQL存储过程的新手。不知道为什么我会出现以下错误。请帮我调试一下。 1064年的今天,您的SQL语法出现错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第3行的user_-username=@th'中使用near'作为该用户的id,该用户的全名 表名:user_master 用户id密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密