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

用hibernate时遇到这个报错,下面是代码,很简单的用户和订单一对多情况,在测试删除user时,报的错报错严重:YouhaveanerrorinyourSQLsynt... 用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>
展开
 我来答
小白聊电子科技
高粉答主

2020-03-10 · 专注电子数码问题解答
小白聊电子科技
采纳数:775 获赞数:75433

向TA提问 私信TA
展开全部

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

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

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

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

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

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

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

grace23450
2018-09-17 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7081
采纳率:77%
帮助的人:2313万
展开全部
你把要执行的sql打印出来看看,这个异常是语法错误导致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
腾讯电脑管家
2018-11-04 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
展开全部
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
竞艺装饰CE
推荐于2018-02-27 · TA获得超过145个赞
知道小有建树答主
回答量:195
采纳率:68%
帮助的人:27.5万
展开全部
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-20
展开全部
Order映射文件中<many-to-one/>中加上cascade=“all”试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式