刚刚开始学习hibernate,结合书上讲的和网上的实力,自己试着写了一个测试hibernate的工程,结果总是报数据表名对象无效的异常,比如我的数据表名称为"t_user",异常就报,对象名‘t_user’无效,
下面是异常信息,请大家帮忙指正一下,谢谢。
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.birthday as birthday0_ from t_user user0_ where user0_.id=?
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2231)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.ctrl.UserDAO.findById(UserDAO.java:43)
at com.servlet.TestServlet.doPost(TestServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 't_user' 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
at org.hibernate.loader.Loader.doQuery(Loader.java:697)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
... 23 more
2009-8-8 23:30:57 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet TestServlet threw exception
java.lang.NullPointerException
at com.servlet.TestServlet.doPost(TestServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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)
下面是异常信息,请大家帮忙指正一下,谢谢。
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.birthday as birthday0_ from t_user user0_ where user0_.id=?
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2231)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.ctrl.UserDAO.findById(UserDAO.java:43)
at com.servlet.TestServlet.doPost(TestServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 't_user' 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
at org.hibernate.loader.Loader.doQuery(Loader.java:697)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
... 23 more
2009-8-8 23:30:57 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet TestServlet threw exception
java.lang.NullPointerException
at com.servlet.TestServlet.doPost(TestServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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)
解决方案 »
- 求正则表达式,如何把半角<......>替换为《......》呢?谢谢
- 老生常谈,问大鸟们一个struts的 权限问题
- java里如何取得当前系统时间,如何在时间上加上一个月或加一年?
- web系统中,服务端如何发通知给客户端(浏览器)
- 100分~在jsp里调用批处理的问题~~~~
- tomact 5.0问题
- 一个读写文件的例子中,高手帮我怎么处理写文件时中文不变为乱码????
- 服务器上有一个htm文件,比如:www.word.com/aaa.htm有另一个htm文件,上面有一个按钮,怎么样使客户端按了这个按钮后,就弹出ie的下载框
- 我已经把servlet.jar加到classpath中了,可是为什么还是无法编译servlet?
- 在TomCat环境中由系统进行安全验证时,如何注销?
- Unable to instantiate Action, login, defined for 'login' in namespace '/'Error
- 文件上传 如何读取apk文件的 包名、版本号、图标?
还有,你最好把你生成这个sql语句的代码贴出来,这张会比较好查错
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="connection.url">
jdbc:sqlserver://WWW-0107C52A0CE:1433;dataName=test
</property>
<property name="connection.username">sa</property>
<property name="connection.password">19830125</property>
<mapping resource="com/test/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>下面是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="com.test">
<class name="User" table="t_user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="identity" />
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="birthday" column="birthday" type="java.sql.Date"/>
</class>
</hibernate-mapping>下面是打印出的sql语句
select user0_.id as id0_, user0_.name as name0_, user0_.birthday as birthday0_ from t_user user0_ where user0_.id=?
如果可以那再看看
<property name="connection.url">
jdbc:sqlserver://WWW-0107C52A0CE:1433;dataName=test
</property>
有没有连接对
package com.ctrl;import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.classic.Session;import com.common.BaseHibernateDAO;
import com.sun.org.apache.commons.logging.Log;
import com.sun.org.apache.commons.logging.LogFactory;
import com.test.User;public class UserDAO extends BaseHibernateDAO implements IUserDAO { private static final Log log = LogFactory.getLog(UserDAO.class);
public void delete(User persistentInstance) {
// TODO Auto-generated method stub } public List findAll() {
// TODO Auto-generated method stub
return null;
} public List findByExample(User instance) {
// TODO Auto-generated method stub
return null;
} public User findById(Integer id) {
// TODO Auto-generated method stub
Session s = null;
try
{
s = this.getSes();
s.beginTransaction();
User user = (User)s.load(User.class, id);
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getBirthday());
s.getTransaction().commit();
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getBirthday());
return user;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} public List findByName(String name) {
// TODO Auto-generated method stub
return null;
} public List findByProperty(String propertyName, Object value) {
// TODO Auto-generated method stub
return null;
} public void save(User transientInstance) {
// TODO Auto-generated method stub
log.debug("save User Instance");
Session session = null;
try{
session = this.getSes();
session.beginTransaction();
session.save(transientInstance);
session.getTransaction().commit();
log.debug("save User Instance Successful");
} catch (Exception e) {
log.debug("save User Instance Successful");
e.printStackTrace();
}
}}
HibernateSeesionFactory类
/**
*
*/
package com.common;import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;/**
* @author Administrator
*
*/
public class HibernateSessionFactory { private static Configuration config = new Configuration();
private static final ThreadLocal<Session> localThread = new ThreadLocal<Session>();
private static SessionFactory sessionFactory;
// 构建session工厂
public HibernateSessionFactory()
{
config.configure("/hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();
}
// 获取session
public Session getSe() throws HibernateException
{
Session session = (Session)localThread.get();
if(session==null || !session.isOpen())
{
session = (sessionFactory != null)?sessionFactory.openSession():rebulidSessionFactory().openSession();
localThread.set(session);
}
return session;
}
// 重建session工厂
private SessionFactory rebulidSessionFactory()
{
config = config.configure("/hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();
return sessionFactory;
}
}
// TODO Auto-generated method stub
Session s = null;
try
{
s = this.getSes();
s.beginTransaction();
User user = (User)s.load(User.class, id);
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getBirthday());
s.getTransaction().commit();
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getBirthday());
return user;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
红色的一句是报错的,因为根本就没有查出user数据,所以user的name变量是null
没有查出的原因就是报数据表名“t_user”对象无效
我是在官方网站下载的最新的jar包
二楼的回答是正解。
你看看数据库用对了吗?
像我是的。以为数据库出错了。重装的数据库都不好使
后来才发现是用错了
create database demo
忘了use demo
结果是用的默认的Master...
这样就会出现列名无效。。
把你的工程目录结构贴出来,还有你的sessionFactory.class是自动创建的还是手动写的?
我的数据表是自己手动创建的,不是用的sql创建,连接数据库的配置文件也有dataName=test啊我的工程目录结构中hibernate.cfg.xml文件就在src目录下,User.hbm.xml和UserDAO类在同一个包目录下,session工厂类是我自己写的,但是和myeclipse自动生成的是一样的,我看过config的配置文件路径,也没有错误