配置文件如下:是myeclipse的hibernate工具生成的
?xml version="1.0"?>
<!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 - Hibernate Tools
-->
<hibernate-mapping>
    <class name="pj.student.Student" table="student" catalog="pj">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
        <property name="pwd" type="java.lang.String">
            <column name="pwd" length="20" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
运行的时候报错如下:
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not execute query; bad SQL grammar [select this_.id as id0_, this_.name as name0_0_, this_.pwd as pwd0_0_ from pj__student this_ where (this_.name=? and this_.pwd=?)]; nested exception is java.sql.SQLException: Base table or view not found message from server: "Table 'pj.pj__student' doesn't exist"
java.sql.SQLException: Base table or view not found message from server: "Table 'pj.pj__student' doesn't exist"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2247)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1272)
at org.hibernate.loader.Loader.doQuery(Loader.java:391)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:111)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1322)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300)
at org.springframework.orm.hibernate3.HibernateTemplate$38.doInHibernate(HibernateTemplate.java:1012)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.findByExample(HibernateTemplate.java:1001)
at org.springframework.orm.hibernate3.HibernateTemplate.findByExample(HibernateTemplate.java:994)
at pj.student.StudentDAO.findByExample(StudentDAO.java:65)
at pj.bo.student.StudentBO.studentlogin(StudentBO.java:35)
at pj.struts.action.LoginAction.execute(LoginAction.java:45)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:154)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:178)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:268)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:389)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:492)
at com.caucho.util.ThreadPool.run(ThreadPool.java:425)
at java.lang.Thread.run(Thread.java:595)
11:47:59,980  WARN RequestProcessor:538 - Unhandled Exception thrown: class org.springframework.jdbc.BadSqlGrammarException我自己感觉是表名映射错了,就把这句中的 catalog="pj"给删掉就好了,改成下面这样
<class name="pj.student.Student" table="student">
但是我想问下为什么会出现这样的情况,除了catalog="pj",还有哪个地方让它知道数据库叫pj呢
我的datasource的配置:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/</value>
</property>
<property name="username">
<value>root</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>pj/student/Student.hbm.xml</value></list>
</property></bean>
请大大们指点一下,谢谢!

解决方案 »

  1.   

    不好意思,datasource的配置是这样:
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
    改动在这儿,有数据库名字      <value>jdbc:mysql://127.0.0.1:3306/pj</value>
    </property>
    <property name="username">
    <value>root</value>
    </property>
    </bean>
    我把这里的pj删掉的话,运行的时候就提示没有选择数据库了。。
      

  2.   

    你有在数据库pj下建student表吗?
      

  3.   

    有啊,我把<class name="pj.student.Student" table="student" catalog="pj">
    这句里的 catalog="pj"去掉就可以访问了,但是我不明白为什么有这个就不行了,找的表也变成
    pj__student了
      

  4.   

    刚上google搜了一下,说如果加了schema或catalog,表名会加上所指定的schema和catalog的名字扩展为全限定名,但是这个是在什么情况下用的,有什么作用呢?
      

  5.   

    winnyboy() :表前缀带有pj,是pj_student这样?那配置文件里的表名又是什么?,这样做有什么用?