关于hibernate的 org.hibernate.exception.SQLGrammarException:

用hibernate时遇到这个报错,下面是代码,很简单的用户和订单一对多情况,在测试删除user时,报的错

报错
严重: 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 'order orders0_ where orders0_.userid=22' at line 1
org.hibernate.exception.SQLGrammarException: could not initialize a collection:
user.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.com.yifxiang.mobileShop.entity">
<class name="User" table="user">
<id name="userId" column="userid">
<generator class="increment"></generator>
</id>
<property name="userName" column="username"></property>
<property name="password" column="password"></property>
<one-to-one name="userInfo" class="UserInfo" cascade="all" property-ref="user"></one-to-one>

<set name="orders" cascade="all" inverse="true" >
<key column="userid"></key>
<one-to-many class="Order"/>
</set>

<!-- <set name="evaluates" cascade="all" inverse="true">
<key column="userid"></key>
<one-to-many class="Evaluate"/>
</set>
<set name="addresses" cascade="all" inverse="true">
<key column="userid"></key>
<one-to-many class="Address"/>
</set> -->

</class>

</hibernate-mapping>
order.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.com.yifxiang.mobileShop.entity">
<class name="Order" table="order">
<id name="orderId" column="orderid">
<generator class="increment"></generator>
</id>
<property name="coat" column="coat"></property>
<property name="date" column="date"></property>
<!--
<set name="orderLine" cascade="all" inverse="true">
<key column="orderid"></key>
<one-to-many class="OrderLine"/>
</set> -->
<!-- <many-to-one name="orderStatus" class="OrderStatus" column="orderstatusid"></many-to-one>
<many-to-one name="payway" class="Payway" column="paywayid"></many-to-one> -->

<many-to-one name="user" class="User" column="userid"></many-to-one>
<!-- <many-to-one name="address" class="Address" column="addressid"></many-to-one> -->
</class>

</hibernate-mapping>

用hibernate时遇到报错是因为设置错误,解决方法如下:

1、首先定义一个接口,参数为sql语句,然后定义用一个类来实现这个接口。

2、使用hibernate的getHibernateTemplate方法获得对象,获得sesson工厂,建立数据库连接即可。

3、然后就可以使用数据库的操作,比如Statement对象进行相关操作,此方法中接收的参数使用;隔开的,所以对接收参数进行处理。

4、数据库的连接是非常宝贵的资源,在执行完sql语句后,不要忘记关闭相关的数据库连接。

5、在control层调用service层的方法,使用stringbuffer动态拼接好相关的sql语句即可。

6、最后看下执行的后台输出以及看下数据库中是否建了相关的表,这里使用datastudio工具进行查看。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-09-17
你把要执行的sql打印出来看看,这个异常是语法错误导致。
第2个回答  2018-11-04
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
第3个回答  推荐于2018-02-27
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。本回答被网友采纳
第4个回答  2014-09-20
Order映射文件中<many-to-one/>中加上cascade=“all”试一下

关于hibernate的 org.hibernate.exception.SQLGrammarException:
1、首先定义一个接口,参数为sql语句,然后定义用一个类来实现这个接口。2、使用hibernate的getHibernateTemplate方法获得对象,获得sesson工厂,建立数据库连接即可。3、然后就可以使用数据库的操作,比如Statement对象进行相关操作,此方法中接收的参数使用;隔开的,所以对接收参数进行处理。4、数据库的连接是...

org.hibernate.exception.SQLGrammarException: could not execute...
这是个sql语法错误 错误在你ProviderServiceImpl类的getProvider方法中,26行,你把那前后几行的代码贴出来,不然看不出错误

org.hibernate.exception.SQLGrammarException: Could not execute...
像这种错误一般是由于sql或hql查询语句写得不对,或者映射文件有问题。

org.hibernate.exception.SQLGrammarException: Could not execute...
把你配置文件的 <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory<\/property> <mapping resource="com\/bjsxt\/hibernate\/User.hbm.xml"\/> 去掉试试,我没Oracle数据库,不能试,但是我觉得,你那样配置了应该是打开JDBC的东西,而在你save时用的是Hib...

org.hibernate.exception.SQLGrammarException: could not execute...
1,直接看,应该是你拼时间的时候出错了,你不要直接把时间拼到HQL里面,使用?占位符,使用query.setParameter方法来设置参数值试试;2,HQL是不能直接在数据库里面直接运行的。

org.hibernate.exception.SQLGrammarException: could not execute...
<property name="connection.url"> jdbc:oracle:thin:@192.168.5.245:1521:oracle <\/property> <property name="dialect">org.hibernate.dialect.Oracle9Dialect <\/property> <property name="myeclipse.connection.profile">MyOracle Conection <\/property> <property name="connection.password">...

org.hibernate.exception.SQLGrammarException: Cannot open connect...
数据库连接失败。第一检查驱动 第二检查url 第三检查用户名和密码

org.hibernate.exception.SQLGrammarException: could not execute...
这个应该是hibernate打印的sql语句,只看这个看不出问题,还得看你代码里面的hql语句。

org.hibernate.exception.SQLGrammarException: could not execute...
email表的annex是非基本数据类型,不能select进行查询

Hibernate 本地sql org.hibernate.util.JDBCExceptionReporter...
上面的问题需要在对应的mysql的链接驱动上,增加&useOldAliasMetadataBehavior=true的参数,表示设置当前mysql的库支持别名查询,否则将会导致查询时持续提示列不存在,但:上面楼主的问题好像真的是job_id不存在而导致,所以useOldAliasMetadataBehavior的别名开启的设置,和上面楼主的异常似乎不太一样,只供...

相似回答