"'last

    技术2022-05-11  132

    昨天好郁闷,碰到了个流氓问题, "'last_insert_id' 不是可以识别的 函数名",改了很多代码,都不行;

    我的程序是这样的,有个Student类,对应的ADO是StudentADO,当用户一登陆系统,便向SQL Server2000数据库插入一个用户;

    Student类:

    package hqq.db;

    import org.apache.struts.validator.ValidatorActionForm;

     

    /** * Student generated by MyEclipse - Hibernate Tools */

    public class Student extends ValidatorActionForm implements java.io.Serializable {

        // Fields   

         private Integer stdId;     private String stdName;     private String stdPwd;      /** default constructor */    public Student() {    }

            /** full constructor */    public Student(String stdName, String stdPwd) {        this.stdName = stdName;        this.stdPwd = stdPwd;    }

           // Property accessors

        public Integer getStdId() {        return this.stdId;    }        public void setStdId(Integer stdId) {        this.stdId = stdId;    }

        public String getStdName() {        return this.stdName;    }        public void setStdName(String stdName) {        this.stdName = stdName;    }

        public String getStdPwd() {        return this.stdPwd;    }        public void setStdPwd(String stdPwd) {        this.stdPwd = stdPwd;    }  

    StudentADO:

    package hqq.db;

    import java.util.Iterator;import java.util.List;

    import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.hibernate.LockMode;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.criterion.Example;import org.springframework.context.ApplicationContext;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    /** * Data access object (DAO) for domain model class Student. * @see hqq.db.Student * @author MyEclipse - Hibernate Tools */public class StudentDAO extends HibernateDaoSupport {

        private static final Log log = LogFactory.getLog(StudentDAO.class);

        public static String cheshi = "成功调用StudentDAO";           private SessionFactory sessionFactory;     protected void initDao() {  //do nothing }        public void save(Student stu) {//主要调用这个方法        log.debug("saving Student instance");        try {         System.out.println("do save student");         sessionFactory = this.getSessionFactory();            Session session = sessionFactory.openSession();            Transaction tx=session.beginTransaction();   session.save(stu);   tx.commit();   session.close();            log.debug("save Student successful");        } catch (RuntimeException re) {            log.error("save failed", re);            throw re;        }    }     public void delete(Student persistentInstance) {        log.debug("deleting Student instance");        try {            getHibernateTemplate().delete(persistentInstance);            log.debug("delete successful");        } catch (RuntimeException re) {            log.error("delete failed", re);            throw re;        }    }        public Student findById( java.lang.Integer id) {        log.debug("getting Student instance with id: " + id);        try {            Student instance = (Student) getHibernateTemplate()                    .get("hqq.db.Student", id);            return instance;        } catch (RuntimeException re) {            log.error("get failed", re);            throw re;        }    }            public List findByExample(Student instance) {        log.debug("finding Student instance by example");        try {            List results = getSession()                    .createCriteria("hqq.db.Student")                    .add(Example.create(instance))            .list();            log.debug("find by example successful, result size: " + results.size());            return results;        } catch (RuntimeException re) {            log.error("find by example failed", re);            throw re;        }    }            public List findStudent(Student std) {        log.debug("finding Student instance by example");        try {         System.out.println("do findStudent");         Session session = getSession();         System.out.println("connect:"+session.isConnected());                  Transaction tx=session.beginTransaction();                  Query query = session.createQuery("from Student student where student.stdName=:name and student.stdPwd=:pwd");            //Query query = session.createQuery("from Student student where student.stdName='"+std.getStdName()+"' and student.stdPwd='"+std.getStdPwd()+"'");            query.setString("name",std.getStdName());            query.setString("pwd",std.getStdPwd());            Iterator it = query.iterate();      while(it.hasNext()){       Student stud = (Student)it.next();       System.out.println(stud.getStdName());      }                        List results = query.list();            //            Student stu1 = new Student();//      stu1.setStdName("zhanghsan1");//      stu1.setStdPwd("zhangshan1");//      session.save(stu1);//            tx.commit();            System.out.println("size:"+results.size());            session.close();            return results;        } catch (RuntimeException re) {           System.out.println(re.getMessage());            throw re;        }    }            public Student merge(Student detachedInstance) {        log.debug("merging Student instance");        try {            Student result = (Student) getHibernateTemplate()                    .merge(detachedInstance);            log.debug("merge successful");            return result;        } catch (RuntimeException re) {            log.error("merge failed", re);            throw re;        }    }

        public void attachDirty(Student instance) {        log.debug("attaching dirty Student instance");        try {            getHibernateTemplate().saveOrUpdate(instance);            log.debug("attach successful");        } catch (RuntimeException re) {            log.error("attach failed", re);            throw re;        }    }        public void attachClean(Student instance) {        log.debug("attaching clean Student instance");        try {            getHibernateTemplate().lock(instance, LockMode.NONE);            log.debug("attach successful");        } catch (RuntimeException re) {            log.error("attach failed", re);            throw re;        }    }

     public static StudentDAO getFromApplicationContext(ApplicationContext ctx) {     return (StudentDAO) ctx.getBean("StudentDAO"); }}

     

    配置文件:

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  <property name="driverClassName">   <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>  </property>  <property name="url">   <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ssh</value>  </property>  <property name="username">   <value>aa</value>  </property>  <property name="password">   <value>aa</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.SQLServerDialect</prop>    <prop key="hibernate.show_sql">true</prop>   </props>  </property>  <property name="mappingResources">   <list>    <value>hqq/db/Course.hbm.xml</value>    <value>hqq/db/Student.hbm.xml</value>   </list>  </property> </bean>  <bean id="CourseDAO" class="hqq.db.CourseDAO">  <property name="sessionFactory">   <ref bean="sessionFactory" />  </property> </bean> <bean id="StudentDAO" class="hqq.db.StudentDAO">  <property name="sessionFactory">   <ref bean="sessionFactory" />  </property> </bean>   <bean name="/login" class="hqq.struts.action.LoginAction">  <property name="studao">   <ref bean="StudentDAO" />  </property> </bean></beans>

    原来我使用的数据库的方言不对,应该是org.hibernate.dialect.SQLServerDialect

     

    现在可以运行了:)


    最新回复(0)