我初学hibernate 在学习一个简单的注册模块,在DAOImpl 实现类中写查询方法public User queryByID(String username) {
List list = this.getHibernateTemplate().find(
"select user from User user where user.username ='" + username+ "'");
if (list.size() == 0) {
return null;
} else {
return (User) list.get(0);
} }例子中,用的表名为user 所以例子中的代码为上面所写。但我现在的表名为BLOG_USER 那么我该如何修改这条HQL语句。
我试着
List list = this.getHibernateTemplate().find(
"select BLOG_USER from User BLOG_USER where BLOG_USER.username ='" + username+ "'");但报错
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select user0_.username as username0_, user0_.password as password0_, user0_.nickname as nickname0_, user0_.question as question0_, user0_.answer as answer0_ from User user0_ where user0_.username='zzs_woods']; SQL state [ZZZZZ]; error code [156]; Incorrect syntax near the keyword 'User'.
; nested exception is com.sybase.jdbc3.jdbc.SybSQLException: Incorrect syntax near the keyword 'User'.请教,我该如何写这条代码。谢谢!
List list = this.getHibernateTemplate().find(
"select user from User user where user.username ='" + username+ "'");
if (list.size() == 0) {
return null;
} else {
return (User) list.get(0);
} }例子中,用的表名为user 所以例子中的代码为上面所写。但我现在的表名为BLOG_USER 那么我该如何修改这条HQL语句。
我试着
List list = this.getHibernateTemplate().find(
"select BLOG_USER from User BLOG_USER where BLOG_USER.username ='" + username+ "'");但报错
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select user0_.username as username0_, user0_.password as password0_, user0_.nickname as nickname0_, user0_.question as question0_, user0_.answer as answer0_ from User user0_ where user0_.username='zzs_woods']; SQL state [ZZZZZ]; error code [156]; Incorrect syntax near the keyword 'User'.
; nested exception is com.sybase.jdbc3.jdbc.SybSQLException: Incorrect syntax near the keyword 'User'.请教,我该如何写这条代码。谢谢!
解决方案 »
- 求助!!! object references an unsaved transient instance 怎么解决
- 如何通过字符串ID获取对应的Bean实例?
- JSF的问题
- FCK过滤标签等问题
- 请教一个问题,我对SPRING+dwr的结合不太懂,急
- jdbcTemplate的问题
- 流程设计器问题
- 今天面试的问题,什么叫J2EE?Spring,Hibernate,Struts叫J2EE吗?还有是不是一定要J2ee1.4才真正叫J2ee?
- JDBC驱动程序安装后连接问题!请指教!
- 表单查询中文异常,字母数字正常
- js设置cookie,servlet读cookie,读不到,急
- 给<s:select/>中的list动态赋值
List list = this.getHibernateTemplate().find(
"from BlogUser user where user.username ='" + username+ "'");
重新生成BLOG_USER表的映射文件和pojo
所以你只要像下边这样写,要带上BlogUser所在的报路径,比如:cn.test.BlogUser
"select user from BlogUser user where user.username ='" + username+ "'");
原来是在我的*.hbm.xml 里面 我按例子写的,没有指定我的表名
<hibernate-mapping>
<class name="com.jxccblog.po.User">
<id name="username">
<generator class="assigned"></generator>
</id>
<property name="password"></property>
<property name="nickname"></property>
<property name="question"></property>
<property name="answer"></property>
</class>
</hibernate-mapping>现在,我在class 里面添加了表名
<hibernate-mapping>
<class name="com.jxccblog.po.User" table="BLOG_USER">
<id name="username">
<generator class="assigned"></generator>
</id>
<property name="password"></property>
<property name="nickname"></property>
<property name="question"></property>
<property name="answer"></property>
</class>
</hibernate-mapping>
问题就解决了。可是我在DAO的实现类中,还是如前面所写
List list = this.getHibernateTemplate().find(
"select user from User user where user.username ='" + username+ "'");这样会有隐含的问题吗?另外我想问问大家,为什么一开始在*.hbm.xml 中class 属性中没有写表名,难道表名不是必写项吗?如果不写,会默认为什么表名啊?
谢谢大家,结贴!
List list = this.getHibernateTemplate().find(
"select BLOG_USER from User BLOG_USER where BLOG_USER.username ='" + username+ "'");这条语句是错误的,hql语句所查询的是pojo对象,不是数据库中的表,你要想查询BLOG_USER表中的数据,首先得配置BLOG_USER表的映射文件,例如:BlogUser.hbm.xml,还有一个BlogUser类文件,然后在hibernate.cfg.xml文件中将BlogUser.hbm.xml加载进来,hql语句中所有的字段都是BlogUser类中的属性
例如:
List list = this.getHibernateTemplate().find(
"select b.userid,b.password from User BlogUser b where b.username ='" + username+ "'");BlogUser
b.userid,b.password,b.username 都是BlogUser对象中的属性还是先看看hibernate的配置方法吧
默認的是和數據庫中的表名一致啊,你最開始不就是USER嗎? POJO類名也是USER,所以不會出錯。