当前位置:编程学习 > JAVA >>

getHibernateTemplate().save() 无法插入数据

一直无法插入数据  按照书上例子写的代码 一进行插入操作就跳throw JDBCExceptionHelper.convert错误
弄了好几天了  求助论坛各位大神   能帮我看下问题在哪里吗
跳转到的报错文件AbstractReturningDel(不是我写的 自动跳过来的)
package org.hibernate.id.insert;

import org.hibernate.id.PostInsertIdentityPersister;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.pretty.MessageHelper;

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Abstract InsertGeneratedIdentifierDelegate implementation where the
 * underlying strategy causes the enerated identitifer to be returned as an
 * effect of performing the insert statement.  Thus, there is no need for an
 * additional sql statement to determine the generated identitifer.
 *
 * @author Steve Ebersole
 */
public abstract class AbstractReturningDelegate implements InsertGeneratedIdentifierDelegate {
private final PostInsertIdentityPersister persister;

public AbstractReturningDelegate(PostInsertIdentityPersister persister) {
this.persister = persister;
}

public final Serializable performInsert(String insertSQL, SessionImplementor session, Binder binder) {
try {
// prepare and execute the insert
PreparedStatement insert = prepare( insertSQL, session );
try {
binder.bindValues( insert );
return executeAndExtract( insert );
}
finally {
releaseStatement( insert, session );
}
}
catch ( SQLException sqle ) {
throw JDBCExceptionHelper.convert(
session.getFactory().getSQLExceptionConverter(),
        sqle,
        "could not insert: " + MessageHelper.infoString( persister ),
        insertSQL
);
}
}

protected PostInsertIdentityPersister getPersister() {
return persister;
}

protected abstract PreparedStatement prepare(String insertSQL, SessionImplementor session) throws SQLException;

protected abstract Serializable executeAndExtract(PreparedStatement insert) throws SQLException;

protected void releaseStatement(PreparedStatement insert, SessionImplementor session) throws SQLException {
session.getBatcher().closeStatement( insert );
}
}

映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
 <class catalog="LakeWater" name="domain.userinfo.UserInfo" schema="dbo" table="User_Info">
  <id name="UserID" type="java.lang.Integer">
   <column name="UserID"/>
   <generator class="native"/>
  </id>
  
  <property  name="UserName" type="java.lang.String">
   <column length="128" name="UserName"/>
  </property>
  <property  name="RealName" type="java.lang.String">
   <column length="128" name="RealName"/>
  </property>
  <property  name="Password" type="java.lang.String">
   <column length="128" name="Password"/>
  </property>
  <property  name="Email" type="java.lang.String">
   <column length="100" name="Email"/>
  </property>
  <property  name="Telephone" type="java.lang.String">
   <column length="30" name="Telephone"/>
  </property>
  <property  name="CompanyName" type="java.lang.String">
   <column length="150" name="CompanyName"/>
  </property>
  <property  name="CreateTime" type="java.util.Date">
   <column  name="CreateTime"/>
  </property>
  <property  name="LastLoginTime" type="java.util.Date">
   <column name="LastLoginTime"/>
  </property>
 </class>
</hibernate-mapping>


DAO文件
package dao.userinfo;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import domain.userinfo.UserInfo;

public class UserInfoDAOImpl extends HibernateDaoSupport implements UserInfoDAO {
// 检索所有管理员信息
public List<UserInfo> findAll() {
try {
String queryString = "from UserInfo";
return getHibernateTemplate().find(queryString);
} catch (RuntimeException re) {
throw re;
}
}

public void save(UserInfo transientInstance) {
try {
                       //此处报错
getHibernateTemplate().save(transientInstance);
} catch (RuntimeException re) {
throw re;
}
}



package service.userinfo;

import java.util.List;

import dao.userinfo.UserInfoDAO;
import domain.userinfo.UserInfo;

public class UserInfoFacadeImpl implements UserInfoFacade {

private UserInfoDAO userInfoDAO;

public UserInfoDAO getUserInfoDAO() {
return userInfoDAO;
}

public void setUserInfoDAO(UserInfoDAO userInfoDAO) {
this.userInfoDAO = userInfoDAO;
}

public List<UserInfo> findUserInfo() {
// TODO Auto-generated method stub
return userInfoDAO.findAll();
}

//添加新的管理员
public boolean newUserInfo(UserInfo userinfo) {
try {
userInfoDAO.save(userinfo);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}


}


Action
package sunyang.webtier;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;

import domain.userinfo.UserInfo;
import service.userinfo.UserInfoFacade;

public class UserInfoAction extends DispatchAction{
private UserInfoFacade userInfoFacade;

public UserInfoFacade getUserInfoFacade() {
return userInfoFacade;
}

public void setUserInfoFacade(UserInfoFacade userInfoFacade) {
this.userInfoFacade = userInfoFacade;
}

// 新增管理员
public ActionForward addUserInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm dyForm = (DynaActionForm) form;//定义一个动态ActionForm对象
String Password = (String) dyForm.get("Password");// 取得密码
String Email = (String) dyForm.get("Email");
String UserName = (String) dyForm.get("UserName");
String RealName = (String) dyForm.get("RealName");
String Telephone = (String) dyForm.get("Telephone");
String CompanyName = (String) dyForm.get("CompanyName");
        UserInfo u = new UserInfo();
u.setCompanyName(CompanyName);
u.setEmail(Email);
u.setPassword(Password);
u.setRealName(RealName);
u.setTelephone(Telephone);
u.setUserName(UserName);
userInfoFacade.newUserInfo(u);//问题所在  注意!
System.out.println("----------");
ActionForward actForward = mapping.findForward("addSuccess");
String path = actForward.getPath();
path += "?method=findUserInfo";//需要传递的参数
return new ActionForward(actForward.getName(), path, true);//防止刷新提交
}
}


application.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 定义数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<!-- 指定连接数据库驱动 -->
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<!-- 指定连接数据库url -->
<property name="url"
value="jdbc:microsoft:sqlserver://localhost:1433" />
<!-- 指定连接数据库用户名,密码为空 -->
<property name="username" value="sa" />
<property name="password" value="sa" />
</bean>
<!-- 定义Hibernate的sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定Hibernate映射文件 -->
<property name="mappingResources">
<list>
<value>domain/userinfo/UserInfo.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 指定使用方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<!-- 是否在控制台输出sql语句 -->
<prop key="show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<!-- 定义事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务管理拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义代理自动管理事务 -->
<bean id="ProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定需要Spring管理事务的Bean -->
<property name="beanNames">
<list>
<value>userInfoFacade</value>
</list>
</property>
<!-- 调用事务管理拦截器 -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>

<!--把DAO注入session工厂-->
<bean id="userInfoDAO" class="dao.userinfo.UserInfoDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<!--把service注入给DAO-->
<bean id="userInfoFacade" class="service.userinfo.UserInfoFacadeImpl">
<property name="userInfoDAO" ref="userInfoDAO"></property>
</bean>

<!--把Action注入给service-->
<bean name="/back/userInfo" class="sunyang.webtier.UserInfoAction">
<property name="userInfoFacade" ref="userInfoFacade"></property>
</bean>

</beans>


各位大神求看一下  SSH hibernate --------------------编程问答-------------------- 错误代码贴上来
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,