|
原工程是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次如何产生的?
请高手指点! |
|