[quote]
[list]
[1]
如果我们碰到控制台报这个错误:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'hbstpdb.hbstpdb__newskinds' doesn't exist
如去我们的XXXX.hbm.xml文件中找到这个语句
<class name="com.ngworld.bookstore.vo.Newskinds" table="newskinds" catalog=”hbstpdb”>
把上面的这个模式名(catalog=”hbstpdb”)删掉就不会出现上面的错误了
[2]
异常原因:
<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置。
解决方法:
<id>元素映射了相应数据库表的主键字段,对其子元素<generator class="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。
所以我们去我们的vo包中,找我们对应的.hbm.xml的文件,把文件中的<id>配置改成increment就可以了(mysql)
如果我们用的是oracle数据库的话,多表的话我们是要建立sequence(序列的),所以也要把相应的序列文件加到里面
如:
[3]request的一个问题,解释如下:
这个是我们的action的页面准备文件:
Article 是表 list是取出表中指定id的字段,然后通过request把list的值返回到页面中,在页面中就可以用article了,比如$(article.id) 这个里面的id是表的字段,然后通过这个jstl语句就可以取出article表中的id了,但是${article.id}的artciel必须和request.setAttribute("article",list);中引号中的变量一致,如果引号中换了别的变量则在引用中则用那个变量名,如:
request.setAttribute("articlelist",list);
那么在jsp中就这么引用${articlelist.id},所这个参数就可以直接在我们的jsp中引用了
[4]
[b]Lazy错误:[/b]
如果在控制台中报了如下的错误:
这里告诉我们session已经关闭了,所以我们要把我们的hibernate的.hbm.xml文件中的
Class中要把我们的lazy设置成false这样的错误就可以解决了。(注:记住这个是外键表的.hbm.xml文件,比如a表ID和b表ID是关联,b表ID是a表的外键,这个文件是b表的文件,只有lazy加在b表才有作用)
[b][color=darkred]例:[/color][/b]
[5]
[b]For input string: "name"问题:[/b]
当控制台返回以下的错误时:
java.lang.NumberFormatException: For input string: "name"
我们可以去我们的action文件中输出些文件来看看具体是哪里出了问题:
这个是我的action代码(controller),在这里我们可以用:
这个是我的action代码(controller),在这里我们可以用:
System.out.println(categoryList.get(i).getClass());
来输出看看我们哪个类出了问题
我报这个错误的时候是因为的hql语句写错了,所以改完了后就好了
String hql=”from category”;
Return getHibernateTemplelate.find(hql);
这个是我改后的正确代码
我之前错误的代码是这个:
String hql="from Category p left join p.department order by p.id";
return getHibernateTemplate().find(hql);
所以报了上面的错误,具体的我们可以在输出的类中我们把我们错误给找到!
[6]
[b]"table" is not mapped 解决方法:[/b]
这个问题是出在我们的hql语句当中的,其中查询的表是我们的pojo文件的名字而不是我们的表名字
例:
比如我们的pojo文件是CategoryPojo.java而我们的表的名字是category
如果我们的写下面的语句就会报上面的错误:
如果改成这个就不会有错误了
[7]
[b]Property 'name' not found on type java.lang.String问题解决方法:[/b]
当我们的控制台返回下面的错误时:
这里的错误告诉我们是我们的el表达式中出了错误
我到我的jsp文件中去看了看
看看我们的items这里,categoryList是我们request的一个参数,这里应该用items=${ categoryList } 用${}把我们的参数引起来,这个是jstl的语法,我们这样给改了之后,错误就可以解决了!
以上是我在学习spring 做个小小的项目的时候遇到的一些错误,因为控制台返回的信息不够明确所以在许多的地方遇到了问题,而且请教了许多的人才解决了以上的问题,希望这些对于大家来说有很大的帮助 :D
[/list][/quote]
[list]
[1]
如果我们碰到控制台报这个错误:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'hbstpdb.hbstpdb__newskinds' doesn't exist
如去我们的XXXX.hbm.xml文件中找到这个语句
<class name="com.ngworld.bookstore.vo.Newskinds" table="newskinds" catalog=”hbstpdb”>
把上面的这个模式名(catalog=”hbstpdb”)删掉就不会出现上面的错误了
[2]
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():
异常原因:
<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置。
解决方法:
<id>元素映射了相应数据库表的主键字段,对其子元素<generator class="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。
所以我们去我们的vo包中,找我们对应的.hbm.xml的文件,把文件中的<id>配置改成increment就可以了(mysql)
如果我们用的是oracle数据库的话,多表的话我们是要建立sequence(序列的),所以也要把相应的序列文件加到里面
如:
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="sequence" >
<param name="sequence">productseq</param>
</generator>
</id>
[3]request的一个问题,解释如下:
这个是我们的action的页面准备文件:
protected Object FormBackingObject(HttpServletRequest request) throws Exception {
String id = request.getParameter("articleId");
Article list = articleService.getArticleById(id);
request.setAttribute("article",list);
return super.formBackingObject(request);
}
Article 是表 list是取出表中指定id的字段,然后通过request把list的值返回到页面中,在页面中就可以用article了,比如$(article.id) 这个里面的id是表的字段,然后通过这个jstl语句就可以取出article表中的id了,但是${article.id}的artciel必须和request.setAttribute("article",list);中引号中的变量一致,如果引号中换了别的变量则在引用中则用那个变量名,如:
request.setAttribute("articlelist",list);
那么在jsp中就这么引用${articlelist.id},所这个参数就可以直接在我们的jsp中引用了
[4]
[b]Lazy错误:[/b]
如果在控制台中报了如下的错误:
2008-08-20 17:09:57,812 ERROR [org.hibernate.LazyInitializationException] - <could not initialize proxy - the owning Session was closed>
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
这里告诉我们session已经关闭了,所以我们要把我们的hibernate的.hbm.xml文件中的
Class中要把我们的lazy设置成false这样的错误就可以解决了。(注:记住这个是外键表的.hbm.xml文件,比如a表ID和b表ID是关联,b表ID是a表的外键,这个文件是b表的文件,只有lazy加在b表才有作用)
[b][color=darkred]例:[/color][/b]
<hibernate-mapping>
<class name="com.ngworld.bookstore.vo.Department" table="department" lazy="false" >
.......
</class>
</hibernate-mapping>
[5]
[b]For input string: "name"问题:[/b]
当控制台返回以下的错误时:
java.lang.NumberFormatException: For input string: "name"
我们可以去我们的action文件中输出些文件来看看具体是哪里出了问题:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
List categoryList=categoryService.getCategoryList();
for (int i=0;i<categoryList.size();i++){
System.out.println(categoryList.get(i).getClass());
}
request.setAttribute("categoryList", categoryList);
return new ModelAndView("/category/categoryList.jsp");
}
这个是我的action代码(controller),在这里我们可以用:
这个是我的action代码(controller),在这里我们可以用:
System.out.println(categoryList.get(i).getClass());
来输出看看我们哪个类出了问题
我报这个错误的时候是因为的hql语句写错了,所以改完了后就好了
String hql=”from category”;
Return getHibernateTemplelate.find(hql);
这个是我改后的正确代码
我之前错误的代码是这个:
String hql="from Category p left join p.department order by p.id";
return getHibernateTemplate().find(hql);
所以报了上面的错误,具体的我们可以在输出的类中我们把我们错误给找到!
[6]
[b]"table" is not mapped 解决方法:[/b]
这个问题是出在我们的hql语句当中的,其中查询的表是我们的pojo文件的名字而不是我们的表名字
例:
比如我们的pojo文件是CategoryPojo.java而我们的表的名字是category
如果我们的写下面的语句就会报上面的错误:
hql=”from category”
return getHibernateTemplelate.find(hql);
如果改成这个就不会有错误了
hql=”from CategoryPojo”
return getHibernateTemplelate.find(hql);
[7]
[b]Property 'name' not found on type java.lang.String问题解决方法:[/b]
当我们的控制台返回下面的错误时:
严重: Servlet.service() for servlet jsp threw exception
javax.el.PropertyNotFoundException: Property 'name' not found on type java.lang.String
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170)
at javax.el.BeanELResolver.property(BeanELResolver.java:279)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:60)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
这里的错误告诉我们是我们的el表达式中出了错误
我到我的jsp文件中去看了看
<c:forEach items="categoryList" var="category" varStatus="status">
<tr>
<td><c:out value="${status.index+1}"/></td>
<td>${category.name}</td>
<td>${category.department.name}</td>
<td>${category.description }</td>
</tr>
</c:forEach>
看看我们的items这里,categoryList是我们request的一个参数,这里应该用items=${ categoryList } 用${}把我们的参数引起来,这个是jstl的语法,我们这样给改了之后,错误就可以解决了!
以上是我在学习spring 做个小小的项目的时候遇到的一些错误,因为控制台返回的信息不够明确所以在许多的地方遇到了问题,而且请教了许多的人才解决了以上的问题,希望这些对于大家来说有很大的帮助 :D
[/list][/quote]