知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 8881|回复: 17

[求助] 做两天了,郁闷hiberante问题

[复制链接]
发表于 2006-11-28 17:08:50 | 显示全部楼层 |阅读模式
原工程是struts+hiberante,我在action里持久化jsp传入的用户名和密码,代码如下:                                                                                       String userName = (String)adminLoginForm.get("userName");
                String password = (String)adminLoginForm.get("password");
               
                Admin admin = new Admin();
                admin.setName(userName);
                admin.setPassword(password);
                AdminDAO admindao = new AdminDAO();
                admindao.save(admin);
在AdminDAO 里面                                                                           
                public void save(Admin transientInstance) {
           
            Transaction tx=null;
        log.debug("saving Admin instance");
        try {
               
                tx =getSession().beginTransaction();
            getSession().save(transientInstance);
            tx.commit();
            getSession().close();
         
            log.debug("save successful");
        } catch (RuntimeException re) {
            re.printStackTrace();
            tx.rollback();
           
        }
我的配置文件是:
        <hibernate-mapping >
    <class name="com.xiaoxian.bean.Admin" table="ADMIN" schema="HR">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
                    <param name="sequence">SEQ_ADMINSID</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="12" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" length="12" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
可是我调用save()方法时竟然:
Hibernate: select SEQ_ADMINSID.nextval from dual
Hibernate: insert into HR.ADMIN (NAME, PASSWORD, ID) values (?, ?, ?)
Hibernate: select SEQ_ADMINSID.nextval from dual
Hibernate: insert into HR.ADMIN (NAME, PASSWORD, ID) values (?, ?, ?)
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:74)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
        at com.xiaoxian.bean.AdminDAO.save(AdminDAO.java:35)
        at com.xiaoxian.struts.action.AdminLoginAction.execute(AdminLoginAction.java:51)
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.BatchUpdateException: ORA-01400: 无法将 NULL 插入 ("HR"."ADMIN"."PASSWORD")

        at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459)
        at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:3907)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
        ... 29 more
看错误,第一次插入成功,在我数据库里显示了,第二次把空值传入。我不明白,为什么调用两次这个save()?第2次如何产生的?
请高手指点!
 楼主| 发表于 2006-11-28 18:47:06 | 显示全部楼层

我的struts-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
  <data-sources />   <form-beans >    <form-bean name="adminLoginForm" type="org.apache.struts.action.DynaActionForm">
      <form-property name="password" type="java.lang.String" />
      <form-property name="userName" type="java.lang.String" />
    </form-bean>
    <form-bean name="studentLoginForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="password" type="java.lang.String" />
      <form-property name="userName" type="java.lang.String" />
    </form-bean>
  </form-beans>
<global-exceptions />
  <global-forwards >
  </global-forwards>  <action-mappings >
  <action
      attribute="adminLoginForm"
      input="admin/adminLogin.jsp"
      name="adminLoginForm"
      path="/adminLogin"
      scope="request"
      type="com.xiaoxian.struts.action.AdminLoginAction">
      <forward name="success" path="/WEB-INF/security/admin.jsp"></forward>
      <forward name="false" path="/index.jsp"></forward>
    </action>
    <action
      attribute="studentLoginForm"
      input="/index.jsp"
      name="studentLoginForm"
      path="/studentLogin"
      scope="request"
      type="com.xiaoxian.struts.action.StudentLoginAction" >
      </action>
  </action-mappings>
  <message-resources parameter="com.xiaoxian.struts.ApplicationResources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
  </plug-in>
</struts-config>

[ 本帖最后由 pp998 于 2006-11-28 18:48 编辑 ]
 楼主| 发表于 2006-11-29 22:04:14 | 显示全部楼层

楼主的问题真难啊,竟然没人回帖!

悲哀啊。自己回吧,楼主不要问了,问也没人搭理。
发表于 2006-11-29 22:38:01 | 显示全部楼层
我觉得你的Action有问题,在Action中打印一下,得到什么值?
发表于 2006-11-29 22:42:01 | 显示全部楼层
我建议你使用ActionForm or ValidatorForm,不推荐使用动态表单
 楼主| 发表于 2006-11-30 00:19:02 | 显示全部楼层
发表于 2006-11-30 10:15:14 | 显示全部楼层
发表于 2006-11-30 10:20:50 | 显示全部楼层
 楼主| 发表于 2006-11-30 11:14:26 | 显示全部楼层
发表于 2006-11-30 11:47:59 | 显示全部楼层
发表于 2006-12-1 16:47:00 | 显示全部楼层
我做了一遍,没发现这个问题,我的字段包括主键类型和你差不多,只有一个地方不同
<column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
                    <param name="sequence">SEQ_ADMINSID</param>
            </generator>
我菜用的是
<generator class="native">
                    <param name="sequence">student_sequence</param>
            </generator>
发表于 2006-12-1 16:50:36 | 显示全部楼层
 楼主| 发表于 2006-12-1 17:40:26 | 显示全部楼层

我测试时也没错。

郁闷就是在发布到web上,就狂抛。
插入两次。我明明调用一次。
 楼主| 发表于 2006-12-3 05:59:14 | 显示全部楼层
发表于 2007-1-1 21:20:08 | 显示全部楼层
发表于 2007-1-1 22:30:42 | 显示全部楼层
发表于 2007-1-2 00:36:20 | 显示全部楼层
发表于 2007-1-2 00:37:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-7 16:44

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表