读书人

SSH中 getHibernateTemplate().saveOr

发布时间: 2012-03-16 16:34:56 作者: rapoo

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>

读书人网 >J2EE开发

热点推荐