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&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>