关于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> 展开
报错
严重: 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> 展开
10个回答
展开全部
用hibernate时遇到报错是因为设置错误,解决方法如下:
1、首先定义一个接口,参数为sql语句,然后定义用一个类来实现这个接口。
2、使用hibernate的getHibernateTemplate方法获得对象,获得sesson工厂,建立数据库连接即可。
3、然后就可以使用数据库的操作,比如Statement对象进行相关操作,此方法中接收的参数使用;隔开的,所以对接收参数进行处理。
4、数据库的连接是非常宝贵的资源,在执行完sql语句后,不要忘记关闭相关的数据库连接。
5、在control层调用service层的方法,使用stringbuffer动态拼接好相关的sql语句即可。
6、最后看下执行的后台输出以及看下数据库中是否建了相关的表,这里使用datastudio工具进行查看。
展开全部
你把要执行的sql打印出来看看,这个异常是语法错误导致。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-11-04 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
关注
展开全部
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
检查下sql里是否有 role 这个字段。看看数据库是否没有这个column。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
应该是sql和数据结构不匹配导致的。
同时注意下role的大小写吧 ,有的时候数据库会区分大小写的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-20
展开全部
Order映射文件中<many-to-one/>中加上cascade=“all”试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询