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

Spring Hibernate save无法插入到数据库中(上网搜过了,但是没有找到解决的办法)解决办法

2012-03-03 
Spring Hibernate save无法插入到数据库中(上网搜过了,但是没有找到解决的办法)我的Spring配置文件如下:b

Spring Hibernate save无法插入到数据库中(上网搜过了,但是没有找到解决的办法)
我的Spring配置文件如下:


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>

<property name="url">
<value>jdbc:mysql://localhost:3306/store?useUnicode=true&amp;characterEncoding=UTF-8</value>
</property>

<property name="username">
<value>root</value>
</property>

<property name="password">
<value>****</value>
</property>
</bean>


<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>

<property name="mappingResources">
<list>
<value>com/**/bean/ReceUnit.hbm.xml</value>
</list>
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>

<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>


<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


<bean id="ReceUnitDAO" class="com.**.dao.impl.ReceUnitDAOImpl"
scope="singleton">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>


<bean id="receUnitServiceTarger" class="com.**.service.impl.ReceUnitServiceImpl">
<property name="receUnitDAO">
<ref bean="ReceUnitDAO" />
</property>
</bean>

<bean id="receUnitService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="receUnitServiceTarger"></property>
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><!-- PROPAGATION_REQUIRED:如果存在一个事务就使用这个事务,否则开启新的事务 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="addReceUnit" class="com.**.action.receunit.AddReceUnit">
<property name="service" ref="receUnitService"></property>
</bean>

Bean如下:
public class ReceUnit {
private Integer id;
private String index;
private String name;
  setter()&&getter();
}



Action(属性驱动)如下:

public class AddReceUnit extends ActionSupport {
private String index;
private String name;
private ReceUnitService service;
  setter()&&getter();
   
  @Override
public String execute() throws Exception {

  ReceUnit ru = new ReceUnit();
  //主键id在hbm中设置为自增类型


ru.setIndex(index);
ru.setName(name);
this.service.insert(ru);
return SUCCESS;
}

中间的ReceUnitService、ReceUnitServiceImpl和ReceUnitDAO就省略了。

DAOImpl代码如下:

public class ReceUnitDAOImpl extends HavenDAOImpl implements ReceUnitDAO {

@Override
public void insert(ReceUnit ru) {
this.getHibernateTemplate().save(ru);
}

}

hbm如下:
<hibernate-mapping>
 <class name="com.fanghongyu.bean.ReceUnit" table="rece_unit">
  <id name="id" column="id" type="integer">
  <generator class="increment">
  <!-- 主键设置为自增类型 -->
  </generator>
  </id>
  <property name="index" column="index" type="string"></property>
  <property name="name" column="name" type="string"></property>
 </class>
</hibernate-mapping>





执行代码时,控制台有如下的现实:
Hibernate: select max(id) from rece_unit
Hibernate: insert into rece_unit (index, name, id) values (?, ?, ?)
但是看数据库中没有插入成功,请问为什么?


另外我是异步提交的就是:
$.ajax({
  type : "GET",
  url : "addReceUnit.action",
  dateType : "html",
  data : {"index" : $("#rece_unit_index").val(), "name" : content},
  success : function(returnedData){
  }
  });
不知是不是这里出了问题,但是插入前通过控制台可以看到值是拿到了。

[解决办法]
应该url : "addReceUnit.action",不对

你可以用DEBUG看看,有没有进入ACTION里面去
[解决办法]
设置断点调试下吧,首先看到action没 ,然后看到service没有,在就是dao方法调用的时候。
[解决办法]
你debug的时候有没有值?然后就是把你保存的那段代码贴出来。
[解决办法]
是所有的添加方法都这样还是只有这个方法不行。所有的都不行看看是不是驱动或少包 。只有这个的话 建议你写个mian方法测试一下
[解决办法]
你是不是映射错了表或者数据库,然后你看原先的表没数据,可能是插错到其他表中了。
[解决办法]

探讨
引用:

应该url : "addReceUnit.action",不对

你可以用DEBUG看看,有没有进入ACTION里面去

都打印出了:
Hibernate: select max(id) from rece_unit
Hibernate: insert into rece_unit (index, name, id) values……

[解决办法]
看看你的数据表是不是有什么非空的设置,而你传进去的值有null
[解决办法]
<!-- 自动提交 -->
<prop key="hibernate.connection.autocommit">true</prop>

热点排行