簡體   English   中英

休眠:事務提交時間異常(無法執行JDBC批處理更新)

[英]Hibernate : Transaction Commit time exception (Could not execute JDBC batch Update)

我對Hibernate還是很陌生,在執行tx.commit()時遇到了上述異常。 我提供了POJO類,CFG.XML和hibernate DAO代碼,我使用了hibernate 3個jar,並使用了Net Beans IDE(7.3)

請仔細檢查一下,讓我知道我在哪里犯錯。

謝謝

  public String saveEnrollmentData(String uid, String jsonString) { String output = null; try { factory=new AnnotationConfiguration().configure("com/integra/HibernateTest/hibernate.cfg.xml").addAnnotatedClass(EnrollmentBean.class).buildSessionFactory(); Session session = factory.openSession(); Transaction tx = null; tx = session.beginTransaction(); EnrollmentBean enrollment = new EnrollmentBean(); enrollment.setUid(uid); enrollment.setJSONDATA(jsonString); session.saveOrUpdate(enrollment); tx.commit(); output="Updated"; }catch(Exception ex) { System.out.println("Exception :"+ex.getMessage()); output="Exception :"+ex.getMessage(); } return output; } 

 package com.integra.HibernateTest; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table (name="ENROLLMENT_TEST") public class EnrollmentBean implements Serializable { @Id @GeneratedValue @Column (name="er_id") private int id; @Column (name="uid") private String uid; @Column (name="JSONData",length=1000) private String JSONDATA; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getJSONDATA() { return JSONDATA; } public void setJSONDATA(String JSONDATA) { this.JSONDATA = JSONDATA; } } 

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.validator.apply_to_ddl">false</property> <property name="hibernate.validator.autoregister_listeners">false</property> <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@10.10.10.74:1521:imfast</property> <property name="hibernate.connection.username">cia</property> <property name="hibernate.connection.password">cia</property> <property name="hbm2ddl.auto">create</property> <mapping class="com.integra.HibernateTest.EnrollmentBean"/> </session-factory> </hibernate-configuration> 

例外:-

 9 Jan, 2018 11:37:15 AM org.hibernate.event.def.AbstractFlushingEventListener performExecutions SEVERE: Could not synchronize database state with session org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at com.integra.HibernateTest.EnrollmentDAOImpl.saveEnrollmentData(EnrollmentDAOImpl.java:33) at com.integra.HibernateTest.EnrollmentServicesImpl.saveEnrollmentData(EnrollmentServicesImpl.java:17) at com.integra.HibernateTest.EnrollmentAction.saveEnrollmentData(EnrollmentAction.java:32) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269) at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.sql.BatchUpdateException: ORA-01747: invalid user.table.column, table.column, or column specification at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10345) at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) ... 39 more Exception :Could not execute JDBC batch update 

uid名稱是此頁面的保留字

Oracle保留字

如果您無法更改表定義, 可以通過在其前面加上引號來使用它,如下所示:

@Column (name="`uid`")

我很驚訝您能夠使用uid作為列名來創建表。

要針對此特定錯誤更具體,您可以點擊以下鏈接以使其更清晰。

https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_keywd.htm

https://www.techonthenet.com/oracle/errors/ora01747.php

問候,拉文德拉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM