2

I have an error: javax.persistence.PersistenceException:

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

I persist my object to database by entiyManager with the following code:

    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:

 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:

@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', '[email protected]', '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
3
  • 1
    The full stack trace of the exception provides extremely useful information. read it, and post it. Commented Jan 28, 2014 at 21:29
  • It seems not to be the full stack trace Commented Jan 28, 2014 at 23:47
  • Well, it's all I got from Tomcat log. Commented Jan 29, 2014 at 1:17

2 Answers 2

1
  • 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', '[email protected]', '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

Sign up to request clarification or add additional context in comments.

Comments

0

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.

From the ObjectDB documentation for JPA primary keys:

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.

2 Comments

But with @GeneratedValue was exactly the same
What was the mapping defined with @GeneratedValue? If @GeneratedValue was used without a GenerationType, it means that the JPA provider (Hibernate) will select the strategy to generate the primary key values according to the database. For PostgreSQL, it appear when I look at the docs that a sequence will be used. See the Hibernate documentation for the mapping of the id.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.