Java 如何插入';在数据库中使用Hibernate

Java 如何插入';在数据库中使用Hibernate,java,mysql,hibernate,Java,Mysql,Hibernate,我对所有数据库操作都使用hibernate 我的问题是,我想在包含'的表中插入一个字符串,例如rea9'ea/rea9'ea。 当插入它时,我得到以下异常 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f

我对所有数据库操作都使用hibernate

我的问题是,我想在包含
'
的表中插入一个字符串,例如
rea9'ea/rea9'ea
。 当插入它时,我得到以下异常

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ea/rea9','6a8b2622d3b8ab7de31c0e2496cef2bd',5840,'')' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:165)
    ... 8 more

如何解决此问题?

首先,您是否已将表映射到POJO?当然,这就是为什么冬眠如此强大的核心。如果有,则插入任何字符串都很容易:

MyPOJO m = new MyPOJO();
m.setName("asdf'!@#$%^&*()\"1234567890");
HibernateUtil.currentSession().save(m);
如果需要在HQL语句中包含任何字符串,则该字符串应为参数:

HibernateUtil.currentSession().createQuery("from MyTable where Name=:name")
            .setParameter("name","asdf'!@#$%^&*()\"1234567890")
            .list();

将有助于查看执行插入的代码。看起来您的字符串没有被转义,但是Hibernate应该自动为您处理这个问题。事实并非如此,这让我觉得你一定在代码中做了一些有趣的事情。请展示你使用的代码!我正在为它写hql。我只是创建hql并启动查询。没什么好玩的。我猜这就像在表中插入unicode字符串。现在我们都知道OP的密码…;-)看起来您正在手动生成查询。