hibernate连接SQL2000报错--对象名....无效。

搞了半天,老是报错,数据库删了又建,建了又删,还是不行!真郁闷!

  
  
  
  
  1. log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).  
  2. log4j:WARN Please initialize the log4j system properly.  
  3. Hibernate: insert into myhibernate.dbo.student (studentName) values (?) select scope_identity()  
  4. Hibernate: insert into myhibernate.dbo.teacher (teacherName) values (?) select scope_identity()  
  5. Hibernate: insert into myhibernate.dbo.teacher (teacherName) values (?) select scope_identity()  
  6. Hibernate: insert into student_teacher (studentId, teacherId) values (?, ?)  
  7. 2007-8-3 21:19:25 org.apache.catalina.core.StandardWrapperValve invoke  
  8. 严重: Servlet.service() for servlet MyTest threw exception  
  9. org.hibernate.exception.SQLGrammarException: could not insert collection: [org.myhibernate.Student.teachers#21]  
  10. at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)  
  11. at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)  
  12. at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1058)  
  13. at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:26)  
  14. at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)  
  15. at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)  
  16. at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)  
  17. at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)  
  18. at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)  
  19. at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)  
  20. at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)  
  21. at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)  
  22. at org.myhibernate.StudentDAO.save(StudentDAO.java:12)  
  23. at org.myhibernate.MyTest.doGet(MyTest.java:52)  
  24. at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)  
  25. at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)  
  26. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  
  27. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  
  28. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)  
  29. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)  
  30. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)  
  31. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)  
  32. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)  
  33. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)  
  34. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)  
  35. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)  
  36. at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)  
  37. at java.lang.Thread.run(Unknown Source)  
  38. Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'student_teacher' 无效。  
  39. at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)  
  40. at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)  
  41. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)  
  42. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)  
  43. at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)  
  44. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)  
  45. at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)  
  46. at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)  
  47. at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)  
  48. at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)  
  49. at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)  
  50. at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)  
  51. at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)  
  52. at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)  
  53. at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1039)  
  54. ... 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

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!--   
  5. Mapping file autogenerated by MyEclipse Persistence Tools  
  6. -->  
  7. <hibernate-mapping>  
  8. <class name="org.myhibernate.Student" table="student" schema="dbo" 
  9. catalog="myhibernate">  
  10. <id name="studentId" type="java.lang.Integer">  
  11. <column name="studentId" />  
  12. <generator class="native" />  
  13. </id>  
  14. <property name="studentName" type="java.lang.String">  
  15. <column name="studentName" length="50" />  
  16. </property>  
  17. <set name="teachers" cascade="save-update" inverse="false" 
  18. table="student_teacher" catalog="myhibernate" schema="dbo">  
  19. <key column="studentId"></key>  
  20. <many-to-many class="org.myhibernate.Teacher" 
  21. column="teacherId">  
  22. </many-to-many>  
  23. </set>  
  24. </class>  
  25. </hibernate-mapping> 

 

重新启动数据库和tomcat,一切OK!
 

你可能感兴趣的:(Hibernate,数据库,报错,连接,sql2000)