首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

SSH中 getHibernateTemplate().saveOrUpdate不执行,该如何处理

2012-03-16 
SSH中 getHibernateTemplate().saveOrUpdate不执行我是ssh初学者,今天用getHibernateTemplate().find()可

SSH中 getHibernateTemplate().saveOrUpdate不执行
我是ssh初学者,今天用getHibernateTemplate().find()可以得到结果,但是getHibernateTemplate().saveOrUpdate(table)
无法执行insert

我的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  <!--<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">-->
  <!--数据库驱动,我这里使用的是Mysql数据库 -->
  <!--<property name="driverClassName">-->
  <!--<value>com.mysql.jdbc.Driver</value>-->
  <!--</property>-->
  <!--数据库地址,这里也要注意一下编码,不然乱码可是很郁闷的哦! -->
  <!--<property name="url">-->
  <!--<value>-->
  <!--jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8-->
  <!--</value>-->
  <!--</property>-->
  <!--数据库的用户名 -->
  <!--<property name="username">-->
  <!--<value>root</value>-->
  <!--</property>-->
  <!--数据库的密码 -->
  <!--<property name="password">-->
  <!--<value>111</value>-->
  <!--</property>-->
  <!--</bean>-->


  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydatadb"/>
  <property name="user" value="root"/>
  <property name="password" value="3958050"/>
  <property name="minPoolSize" value="6"/>
  <property name="maxPoolSize" value="10"/>
  <property name="maxIdleTime" value="300"/>
  <property name="acquireIncrement" value="3"/>
  <property name="initialPoolSize" value="4"/>
  </bean>

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mappingResources">
  <list>
  <value>mycom/test.hbm.xml</value>
   


  </list>
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  <prop key="hibernate.connection.autocommit">true</prop>
  <prop key="hibernate.show_sql">true</prop>


  <prop key="hibernate.connection.release_mode">auto</prop>
  <prop key="hibernate.cache.use_query_cache">true</prop>
  <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
   

  </props>
  </property>

  </bean>



   

  <bean id="hibernateTemplate"
  class="org.springframework.orm.hibernate3.HibernateTemplate">
  <constructor-arg>
  <ref local="sessionFactory"/>
  </constructor-arg>
  </bean>







  <bean id="personmanager" class="net.personmanager" abstract="false"
  lazy-init="default" autowire="default" dependency-check="default">

  <property name="sessionFactory" >
  <ref local="sessionFactory"/>
  </property>

  </bean>


<bean id="loginaction" class="net.loginaction" abstract="false"
  lazy-init="default" autowire="default" dependency-check="default" scope="prototype">

  <property name="personmanager">
  <ref bean="personmanager" />
  </property>
</bean>


  <bean id="userdao" class="dao.userdao" abstract="false"
  lazy-init="default" autowire="default" dependency-check="default">
  <property name="sessionFactory" >
  <ref local="sessionFactory"/>
  </property>
  </bean>


<bean id="addaction" class="net.addaction" abstract="false"
  lazy-init="default" autowire="default" dependency-check="default" scope="prototype">
  <property name="userdao">
  <ref bean="userdao" />
  </property>
</bean>


  <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
  <ref bean="sessionFactory"/>
  </property>
  </bean>
  <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>



personmanager的java


public class personmanager extends HibernateDaoSupport {
  public int mydd=0;
  private SessionFactory sessionFactory;



   
  public void setMydd(int mydd)
  {
  this.mydd=mydd;
  }
  public int getMydd()
  {
  return mydd;
  }
   
  public boolean checkUser(String userName){
  boolean flag = false;
   

  List<test> userList=new ArrayList<test>();
  userList = getHibernateTemplate().find("from test");
  if(userList.size()>0){
  flag = true;

  }
  mydd=userList.size();
  return flag;


  }

  public boolean addUser(test testtable)
  {
  try
  {

  getHibernateTemplate().saveOrUpdate(testtable);
  getHibernateTemplate().flush();
// Session session=sessionFactory.getCurrentSession();
// session.save(testtable);
// session.flush();

  return true;
  }
  catch(Exception e)
  {
  return false;
  }
  }
}







loginaction.java文件
public class loginaction extends ActionSupport {
  public int mydd=0;
  public test Test;




  public void setMydd(int mydd)
  {
  this.mydd=mydd;
  }
  public int getMydd()
  {
  return mydd;
  }
private String userName;
private personmanager personManage;
public String getUserName() {
  return userName;
}
public void setUserName(String userName) {
  this.userName = userName;
}

public void setPersonmanager(personmanager personManage) {
  this.personManage = personManage;
}
public String execute(){
  String page = "fail";
  boolean flag = false;
  flag = personManage.checkUser(userName);
  mydd=personManage.getMydd();
  if(flag){
  page = "success";
  }
  Test.setAdmin_name("dd");
  Test.setPid(4);
  flag=personManage.addUser(Test);
   
  return page;


}


}

我用的是Idea,观察到
执行了:
Hibernate: select test0_.userid as userid0_, test0_.name as name0_, test0_.pid as pid0_ from mytest test0_
却没有执行insert 语句 
网上很多关于这种类型的都是有Inert没有insert成功

求高手解答

[解决办法]
Hibernate中的saveOrUpdate()和Merge ()
 当我们不知道对象的状态是临时状态还是游离状态时,就会用到saveOrUpdate()或者merge()。
saveOrUpdate()、Merge()根据ID和version的值判断是save还是update。 如果有ID和version值,则调用update。如果不存在该记录,则进行insert操作。
Merge()调用这个方法以后,对象还是游离状态的。saveOrUpdate()后对象会变成持久的。
[解决办法]
Hibernate中的saveOrUpdate()和Merge ()
 当我们不知道对象的状态是临时状态还是游离状态时,就会用到saveOrUpdate()或者merge()。
saveOrUpdate()、Merge()根据ID和version的值判断是save还是update。 如果有ID和version值,则调用update。如果不存在该记录,则进行insert操作。
Merge()调用这个方法以后,对象还是游离状态的。saveOrUpdate()后对象会变成持久的。
[解决办法]
是不是Hibernate的事务没提交,?

可以改为自动提交试试

<property name="hibernate.connection.autocommit">true</property>

热点排行