package com.uubbs.bean;import java.lang.Long;public class UserInfo{ /** identifier field */
private Long ID; /** persistent field */
private String UserName; /** persistent field */
private String PassWord; /** default constructor */
public UserInfo() {
} public Long getID() {
return this.ID;
} public void setID(Long id) {
this.ID = id;
} public String getUserName() {
return this.UserName;
} public void setUserName(String username) {
this.UserName = username;
} public String getPassWord() {
return this.PassWord;
} public void setPassWord(String passwd) {
this.PassWord = passwd;
}
}

解决方案 »

  1.   

    IUserInfoDAO.javapackage com.uubbs.dao;
    import com.uubbs.bean.UserInfo;
    public interface IUserInfoDAO {

    public UserInfo findUserInfoByUserName(String username);
    public UserInfo saveUserInfo(UserInfo userinfo);
    }UserInfoDAOImpl.java:package com.uubbs.dao.hibernate;
    import org.springframework.orm.hibernate.support.HibernateDaoSupport;
    import com.uubbs.bean.UserInfo;
    import com.uubbs.dao.IUserInfoDAO;
    import org.springframework.dao.DataAccessException;
    import java.util.List;public class UserInfoDAOImpl extends HibernateDaoSupport implements IUserInfoDAO{
    private static final String LOAD_BY_USERNAME ="from UserInfo ui where ui.UserName = ?";

    public UserInfoDAOImpl() {
        super();
    }

    public UserInfo findUserInfoByUserName(String username) {
    List l = getHibernateTemplate().find(LOAD_BY_USERNAME, username);
    if (l.size() == 0) {
      return null;
    }
    else {
      return (UserInfo) l.get(0);
    }
    }

    public UserInfo saveUserInfo(UserInfo userinfo)
    {
    try {
      getHibernateTemplate().saveOrUpdate(userinfo);
      return userinfo;
    }
    catch (DataAccessException ex) 
        {
          return null;
    }
    }

    }
      

  2.   

    <!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://127.0.0.1:1433;DatabaseName=BBS
          </value>
        </property>
        <property name="username">
          <value>sa</value>
        </property>
        <property name="password">
          <value>china</value>
        </property>   
      </bean>
     
       <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
          <list>
            <value>com/uubbs/bean/UserInfo.hbm.xml</value>
          </list>
        </property>
        <property name="hibernateProperties">
          <props>
            <prop key="hibernate.dialect">net.sf.hibernate.dialect.SQLServerDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.jdbc.fetch_size">50</prop>
            <prop key="hibernate.jdbc.batch_size">25</prop>
          </props>
        </property>
       </bean>
      
      <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>      <bean id="userInfoDAOImpl" class="com.uubbs.dao.hibernate.UserInfoDAOImpl">
          <property name="sessionFactory">
            <ref local="sessionFactory"/>
          </property>
    </bean>

    <bean id="userInfoDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
         <property name="transactionManager">
            <ref bean="transactionManager" />
         </property>
         <property name="target">
            <ref local="userInfoDAOImpl" />
         </property>
         <property name="transactionAttributes">
           <props>
             <prop key="insert*">PROPAGATION_REQUIRED</prop>
             <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
           </props>
         </property>
        </bean> </beans>
      

  3.   

    头晕,不看你的代码了,你最好跟踪一下你的程序,或者找个例子比较一下,比较容易找出错误的。www.hibernate.org.cn上也有类似的代码
      

  4.   

    我是楼主。 以上配置文件为:  applicationContext.xml以下是测试文件AppContent.java:
    /*
     * Created on 2005-1-18
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package com.uubbs.sys;
    import org.springframework.context.support.*;
    import com.uubbs.bean.UserInfo;
    import com.uubbs.dao.IUserInfoDAO;/**
     * @author Administrator
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */public class AppContext {  private static AppContext instance;  private AbstractApplicationContext appContext;  public synchronized static AppContext getInstance() {
        if (instance == null) {
          instance = new AppContext();
        }
        return instance;
      }  private AppContext() {
        this.appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
      }  public AbstractApplicationContext getAppContext() 
      {
        return appContext;
      }
      
      public static void main(String[] args) throws Exception{
    AppContext ba=new AppContext();

     System.out.println("start");
     UserInfo ui=new UserInfo();
     UserInfo uu=new UserInfo();
       
     ui.setUserName("logon");
     ui.setPassWord("reg");
      
     IUserInfoDAO bb=(IUserInfoDAO)ba.getAppContext().getBean("userInfoDAOProxy"); 
     uu=bb.saveUserInfo(ui);

     System.out.println(uu.getID());   
     System.out.println(uu.getUserName());
     System.out.println(uu.getPassWord());
         
       }     
     
    }测试的结果是:(输出以下数据)
    start
    Hibernate: insert into UserInfo (UserName, PassWord) values (?, ?) select scope_identity()
    45
    logon
    reg但是到数据库中去查询的时候,数据并没有写进去。
    不过当我手工往数据库中添加数据的时候发现ID(UserInfo的主键,为自动增长列)有点奇怪,运行测试程序之前,ID为44,我手工加入进去的数据的ID为46,也就是说测试中ID确实曾经差点加入进去了,但是失败了,所以我想知道为什么没有saveorUpdate()成功。
      

  5.   


    应该是被缓存了,还没有进行事务提交,因此需要使用自动提交。我也遇到这样的情况。例如:
    我最初的代码是下面这样:session = HibernateSessionFactory.currentSession();
    session.save(data);
    session.flush();
    添加了100条数据,结果在数据库看不到,后来代码改成下面的样子:session = HibernateSessionFactory.currentSession();
    Transaction aa = session.beginTransaction();
    session.save(data);
    session.flush();
    aa.commit();
    就写入到数据库了。
      

  6.   

    <prop key="hibernate.jdbc.batch_size">25</prop>把这个改成 1 试试看。我上面的方法只在hibernate里用过,spring的代码刚刚写了一点点,今天写得头大,就不调试了,呵呵
      

  7.   

    感谢 pigo(少壮且行英雄梦,迟暮归守温柔乡)。
    多谢你的提示:应该是被缓存了,还没有进行事务提交,因此需要使用自动提交。我已经解决这个问题了。
    作为存进数据库的代码:uu=bb.saveUserInfo(ui);中的方法saveUserInfo必须在
    <property name="transactionAttributes">
           <props>
             <prop key="insert*">PROPAGATION_REQUIRED</prop>
             <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
           </props>
         </property>
    中说明,结果我的代码没有说明,所以错误就出现了。
    如果将它改成
    <property name="transactionAttributes">
           <props>
             <prop key="save*">PROPAGATION_REQUIRED</prop>
             <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
           </props>
         </property>
    jiu