unclever 2010-12-28 22:53
浏览 313
已采纳

初学hibernate,简单地用了一下SSH2,出现一种难明的错误

用《开发者突击》里面的初步搭建SSH2的代码,连接sqlserver2005,出现下面提示:
Hibernate: select user0_.ID as ID, user0_.username as username0_, user0_.password as password0_, user0_.email as email0_ from user user0_ where user0_.username=?
WARN - SQL Error: 156, SQLState: S0001
ERROR - 关键字 'user' 附近有语法错误。
2010-12-28 22:22:11 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'user' 附近有语法错误。

数据库中我建了表 user,属性有id username password email。

applicationContext 代码如下:
[code="xml"]
<!-- 配置数据源 -->
class="org.apache.commons.dbcp.BasicDataSource">
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">

value="jdbc:sqlserver://localhost:1433;databaseName=DeviceManagement;">



<!-- 配置Hibernate -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
    <property name="mappingResources">
        <list>
            <value>com/demo/hibernate/beans/User.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.SQLServerDialect
            </prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>


<!-- 配置事务 -->
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>


<!-- 定义DAO -->
<bean id="userDAO" class="com.demo.hibernate.dao.UserDAO">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>


<!-- 定义DAO代理 -->
<bean id="UserDAOProxy"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager" />
    </property>
    <property name="target">
        <ref local="userDAO" />
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="insert*">PROPAGATION_REQUIRED</prop>
            <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
</bean>


<!-- 定义Struts配置 -->
<bean name="loginAction"
    class="com.demo.struts2.actions.LoginAction">
    <property name="userDAO">
        <ref local="userDAO" />
    </property>
</bean>
<bean name="logoutAction"
    class="com.demo.struts2.actions.LogoutAction">
    <property name="userDAO">
        <ref local="userDAO" />
    </property>
</bean>
<bean name="registerAction"
    class="com.demo.struts2.actions.RegisterAction">
    <property name="userDAO">
        <ref local="userDAO" />
    </property>
</bean>


<!-- 配置拦截器 -->
<bean name="logger" class="com.demo.spring.aop.LoggingInterceptor" />

<!-- 配置拦截器代理 -->
<bean name="loggingAutoProxy"
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
        <list>
            <value>/login</value>
            <value>/register</value>
        </list>
    </property>
    <property name="interceptorNames">
        <list>
            <value>logger</value>
        </list>
    </property>
</bean>

[/code]

[size=x-large]提示错误行在UserDao里面,
[/size]UserDao
[code="java"]
package com.demo.hibernate.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.demo.hibernate.beans.User;

public class UserDAO extends HibernateDaoSupport implements IUserDAO {

// 验证用户名和密码
public boolean isValid(final String username, final String password) {
    System.out.println("UserDao检验是否有效");
    System.err.println("username:"+username+",password:"+password);
    List list = (List) getHibernateTemplate().execute(new HibernateCallback() {
        public Object doInHibernate(Session session)
                throws HibernateException {

/////////////////////////////////////这里报错///////////////////////////////
List result = session.createCriteria(User.class).add(
Restrictions.eq("username", username)).add(
Restrictions.eq("password", password)).list();
return result;
}
});
if (list.size() > 0) {
return true;
} else {
return false;
}
}
// 判断某个用户是否存在,只需用用户名查询就可以
public boolean isExist(final String username) {
System.err.println("UserDao进行查询");
List list = (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
List result = session.createCriteria(User.class).add(
Restrictions.eq("username", username)).list();
return result;
}
});
if (list.size() > 0) {
return true;
} else {
return false;
}
}
//插入新的用户对象到数据库
public void insertUser(User user) {
System.err.println("UserDao插入数据");
getHibernateTemplate().saveOrUpdate(user);
}
//从数据库中取得用户对象
public User getUser(String userid) {
System.err.println("UserDao取得对象");
return (User) getHibernateTemplate().get(User.class,
new Integer(userid));
}
//取得用户所有详细信息
public List getUsers() {
System.err.println("UserDao取得数据");
return getHibernateTemplate().find("from User");
}
//删除某个用户的所有信息
public void deleteUser(String userid) {
System.err.println("UserDao删除某个用户的所有信息");
Object p = getHibernateTemplate().load(User.class, new Integer(userid));
getHibernateTemplate().delete(p);
}
}

[/code]

请问这是为什么呢?

  • 写回答

4条回答

  • iteye_7064 2010-12-29 00:12
    关注

    猜测可能原因:
    1.hibernate方言是否设置
    2. 可能user在sqlserver中被判定成了关键字,改个其他名字试试。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?