Jason Heck's blog

爱好折腾电脑、幻想、探索未知事物,对挨踢业和网络安全方面十分感兴趣,横向发展,广而不精。作息时间不定,上线时间诡异,QQ常年隐身,偶尔上线,开源产品的支持者,珍爱生命,远离微软,病毒爱好者和Web前端爱好者。虚拟主机评测http://www.idcpw.com

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
搞了半天,老是报错,数据库删了又建,建了又删,还是不行!真郁闷!
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into myhibernate.dbo.student (studentName) values (?) select scope_identity()
Hibernate: insert into myhibernate.dbo.teacher (teacherName) values (?) select scope_identity()
Hibernate: insert into myhibernate.dbo.teacher (teacherName) values (?) select scope_identity()
Hibernate: insert into student_teacher (studentId, teacherId) values (?, ?)
2007-8-3 21:19:25 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet MyTest threw exception
org.hibernate.exception.SQLGrammarException: could not insert collection: [org.myhibernate.Student.teachers#21]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1058)
at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:26)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.myhibernate.StudentDAO.save(StudentDAO.java:12)
at org.myhibernate.MyTest.doGet(MyTest.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'student_teacher' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1039)
... 25 more

老以为是"[SQLServer]对象名 'student_teacher' 无效" 这里作怪!数据库删了又建,建了又删!
真想放弃啊
突然,眼睛一亮,才发觉,原来真正作怪的是
Hibernate: insert into student_teacher (studentId, teacherId) values (?, ?)
看看它与上面两句有什么区别Hibernate: insert into myhibernate.dbo.teacher (teacherName) values (?) select scope_identity()

看出来了吧!少了个myhibernate.dbo,myhibernate是我的数据库名称!
解决方法:在XXX.hbm.xml中修改catalog="myhibernate" schema="dbo",我这里是Student.hbm.xml



<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.myhibernate.Student" table="student" schema="dbo"
     catalog="myhibernate">
     <id name="studentId" type="java.lang.Integer">
      <column name="studentId" />
      <generator  />
     </id>
     <property name="studentName" type="java.lang.String">
      <column name="studentName" length="50" />
     </property>
     <set name="teachers" cascade="save-update" inverse="false"
      table="student_teacher" catalog="myhibernate" schema="dbo">
      <key column="studentId"></key>
      <many-to-many   column="teacherId">
      </many-to-many>
     </set>
</class>
</hibernate-mapping>

重新启动数据库和tomcat,一切OK!
本文标签:
posted on 2008-10-24 00:30  Heck  阅读(1072)  评论(0编辑  收藏  举报
关于我们 | 石器时代| 主机评测 | IDC评测 | IDC投诉 | IDC大全 | 广告服务 | 友情链接 | Heck's Blog
Copyright © 2010 - 2012 石器时代旗下网站 All Rights Reserved 石器时代工作室
联系电话:0755-84256821 服务QQ:想我就吻我想我就吻我 邮箱:Heck@hecks.tk
石器时代技术团队专注开源产品研究,您人生道路上真诚的朋友!感谢www.Hecks.tk 提供相关链接。