简体   繁体   English

Hibernate无法执行JDBC批处理更新

[英]Hibernate could not execute JDBC batch update

I have an error: javax.persistence.PersistenceException: 我有一个错误:javax.persistence.PersistenceException:

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update org.hibernate.exception.ConstraintViolationException:无法执行JDBC批处理更新

I persist my object to database by entiyManager with the following code: 我使用以下代码通过entiyManager将对象持久保存到数据库中:

    public void addPrincipal(Principal u) {

        trns.start();
        trns.getManager().persist(u);
        trns.commit();

}

trns is an object of transaction class I wrote myself, here's the code for used methods: trns是我自己编写的事务类的对象,这是二手方法的代码:

 public void start() {
    EntityManager manager = managerFactory.createEntityManager();
    manager.getTransaction().begin();
    entityManager.set(manager);
}

public void commit() {
    EntityManager manager = entityManager.get();
    if (manager == null || !manager.getTransaction().isActive()) {
        throw new IllegalStateException("No transaction is in progress");
    }
    manager.getTransaction().commit();
    manager.clear();
}

public EntityManager getManager() {
    EntityManager manager = entityManager.get();
    if (manager == null) {
        start();
        manager = entityManager.get();
    }
    if (!manager.getTransaction().isActive()) {
        manager.getTransaction().begin();
    }
    return entityManager.get();
}

The Principal mapping class looks like this: Principal映射类如下所示:

@Entity
@Table(name = "principal")
public class Principal implements Serializable {

@Id

@Column(name = "id_principal")
private Long id_principal;

@Column(name = "name")
private String name;

@Column(name = "surname")
private String surname;

@Column(name = "designation")
private String designation;

@Column(name = "address")
private String address;

@Column(name = "telephone")
private String telephone;

@Column(name = "fax")
private String fax;

@Column(name = "email")
private String email;

@Column(name = "legal_form")
private String legal_form;

@Column(name = "krs")
private String krs;

@Column(name = "authority")
private String authority;

@Column(name = "pesel_regon")
private String pesel_regon;

@Column(name = "nip")
private String nip;

@Column(name = "stock")
private float stock;

@OneToOne(mappedBy = "principal", cascade = CascadeType.ALL)
private RepresentationPerson representation_person;

@OneToOne(mappedBy = "principal", cascade = CascadeType.ALL)
private ContactPerson contact_person;

@OneToMany(mappedBy = "principal")
private Set<StudyCommisioned> study_commisioned;

Getting records from database is not a problem. 从数据库获取记录不是问题。 The only error occurs when I want to save new record to the database 当我想将新记录保存到数据库时发生唯一的错误

Here's full stack trace. 这是完整的堆栈跟踪。 Sorry, I've forgotten: 抱歉,我忘记了:

com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:172)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118)
at com.vaadin.server.AbstractCommunicationManager.handleBurst(AbstractCommunicationManager.java:1678)
at com.vaadin.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1564)
at com.vaadin.server.AbstractCommunicationManager.handleUidlRequest(AbstractCommunicationManager.java:582)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:315)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:201)
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.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
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:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:170)
... 26 more
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in pl.edu.utp.badania.ui.innercomponents.AddPrincipal$1 failed.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:528)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:167)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:984)
at com.vaadin.ui.Button.fireClick(Button.java:367)
at com.vaadin.ui.Button$1.click(Button.java:56)
... 31 more
Caused by: javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
at pl.edu.utp.badania.postgresql.PgSQLTransaction.commit(PgSQLTransaction.java:35)
at pl.edu.utp.badania.postgresql.dao.PrincipalDAO.addPrincipal(PrincipalDAO.java:28)
at pl.edu.utp.badania.ui.innercomponents.AddPrincipal$1.buttonClick(AddPrincipal.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
... 35 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1389)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
... 43 more
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
... 43 more

Caused by: java.sql.BatchUpdateException: Zadanie wsadowe 0 insert into principal (address, authority, designation, email, fax, krs, legal_form, name, nip, pesel_regon, stock, surname, telephone, id_principal) values ('sdasd', 'dfsd', 'asdasd', 'ppp@ppp.com', '3211', '12456', 'Osoba fizyczna', 'dasdas', '4312', '3212', 11.0, 'asdasd', '1234', 2) zostało przerwane. Wywołaj getNextException by poznać przyczynę.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2753)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1887)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:405)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2900)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 51 more
  • Try to run the insert statement in the stack trace 尝试在堆栈跟踪中运行插入语句

    insert into principal (address, authority, designation, email, fax, krs, legal_form, name, nip, pesel_regon, stock, surname, telephone, id_principal) values ('sdasd', 'dfsd', 'asdasd', 'ppp@ppp.com', '3211', '12456', 'Osoba fizyczna', 'dasdas', '4312', '3212', 11.0, 'asdasd', '1234', 2) 将值('sdasd','dfsd','asdasd','ppp @ ppp'插入主体(地址,权限,名称,电子邮件,传真,krs,legal_form,名称,nip,pesel_regon,股票,姓氏,电话,id_principal) .com”,“ 3211”,“ 12456”,“ Osoba fizyczna”,“ dasdas”,“ 4312”,“ 3212”,11.0,“ asdasd”,“ 1234”,2)

  • Check constraints in the table. 检查表中的约束。 There may be more constraint in table UNIQUE KEY , FOREIGN KEY constraints 表UNIQUE KEY和FOREIGN KEY约束中可能会有更多约束

The issue could be caused by the absence of a @GeneratedValue annotation or an error in the code that manage the ids, if the absence of @GeneratedValue is intentional. 如果有意缺少@GeneratedValue,则可能是由于缺少@GeneratedValue批注或管理ID的代码错误引起的。

From the ObjectDB documentation for JPA primary keys: ObjectDB文档中获取有关JPA主键的信息:

If an entity has a primary key field that is not marked with @GeneratedValue, automatic primary key value is not generated and the application is responsible to set a primary key by initializing the primary key field. 如果实体具有未标记为@GeneratedValue的主键字段,则不会生成自动主键值,并且应用程序负责通过初始化主键字段来设置主键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 hibernate:无法执行 JDBC 批量更新 - hibernate: Could not execute JDBC batch update 休眠:事务提交时间异常(无法执行JDBC批处理更新) - Hibernate : Transaction Commit time exception (Could not execute JDBC batch Update) org.hibernate.exception.SQLGrammarException:无法执行 JDBC 批量更新 - org.hibernate.exception.SQLGrammarException:Could not execute JDBC batch update org.hibernate.exception.ConstraintViolationException: 无法执行 JDBC 批量更新 - org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update org.hibernate.exception.ConstraintViolationException:无法执行JDBC批量更新 - org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update org.hibernate.exception.SQLGrammarException:无法执行JDBC批更新 - org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update org.hibernate.exception.DataException: 无法执行 JDBC 批量更新 - org.hibernate.exception.DataException: Could not execute JDBC batch update 休眠一对一映射错误org.hibernate.exception.ConstraintViolationException:无法执行JDBC批更新 - Hibernate one to one mapping error org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update org.hibernate.exception.ConstraintViolationException:无法执行JDBC批量更新[由于唯一约束] - org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update [Due to Unique Constraint] 休眠:SQLGrammarException:无法执行JDBC批更新和BatchUpdateException:ORA-00942:表或视图不存在 - Hibernate: SQLGrammarException: Could not execute JDBC batch update AND BatchUpdateException: ORA-00942: table or view does not exist
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM