P
P
parkito2016-09-30 00:07:38
Java
parkito, 2016-09-30 00:07:38

Why is Hibernate trying to create an entity with a null id?

Hello. Help, please, to solve a problem.
Wrote an application for registering contracts (hibernate+jsp). Now I'm translating all this to spring. It seems that reading from the database works fine. But if I want to create any entity, the exceptions fly out. From the logs, I see that hibernate is trying to create an entity with id = 0. Because of this, I think everything falls down. Why this happens with spring is not clear. Everything worked without him.
Contract{contractId=0, ......
Essence

@Entity
@Table(name = "Contract")
@NamedQuery(name = "Contract.getAll", query = "SELECT c FROM Contract c")
public class Contract {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "contract_id")
    private int contractId;
    @Basic
    @Column(name = "number")
    private String number;

DAO
@Override
    public void create(E entity) throws CustomDAOException {
        try {
            entityManager.persist(entity);
        } catch (PersistenceException e) {
            throw new CustomDAOException("Entity wasn't created: " + entity, e);
        }
    }

What am I doing wrong?
UPD
mySQL 5.7.15
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is operator.exceptions.CustomDAOException: Entity wasn't created: User{userId=0, name='name', secondName='second', birthdayData='08.02.1992', passport='pass', adress='msk', balance=0.0, email='mail.com', accessLevel=null}
Caused by: operator.exceptions.CustomDAOException: Entity wasn't created: User{userId=0, name='name', secondName='second', birthdayData='08.02.1992', passport='pass', adress='msk', balance=0.0, email='mail.com', accessLevel=null}
  at operator.dao.implementation.GenericDAOImpl.create(GenericDAOImpl.java:47)
  at operator.services.implementation.UserServiceImpl.createEntity(UserServiceImpl.java:36)
  at operator.services.implementation.UserServiceImpl.createEntity(UserServiceImpl.java:21)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
  at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
  at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
  at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
  at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
  at com.sun.proxy.$Proxy71.createEntity(Unknown Source)
  at operator.controllers.AdminController.check(AdminController.java:59)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
  at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
  at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
  at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
  at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
  at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
  at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
  ... 80 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: error performing isolated work
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)
  at com.sun.proxy.$Proxy66.persist(Unknown Source)
  at operator.dao.implementation.GenericDAOImpl.create(GenericDAOImpl.java:45)
  ... 109 more
Caused by: org.hibernate.exception.SQLGrammarException: error performing isolated work
  at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
  at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)
  at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:78)
  at org.hibernate.id.enhanced.TableStructure$1.getNextValue(TableStructure.java:125)
  at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:40)
  at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:412)
  at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
  at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67)
  at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189)
  at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)
  at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58)
  at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775)
  at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748)
  at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753)
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146)
  ... 116 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'operator.hibernate_sequence' doesn't exist
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
  at com.mysql.jdbc.Util.getInstance(Util.java:387)
  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
  at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
  at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
  at org.hibernate.id.enhanced.TableStructure.executeQuery(TableStructure.java:224)
  at org.hibernate.id.enhanced.TableStructure.access$300(TableStructure.java:46)
  at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:139)
  at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:126)
  at org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:55)
  at org.hibernate.jdbc.AbstractReturningWork.accept(AbstractReturningWork.java:34)
  at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:56)
  ... 128 more

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
sirs, 2016-09-30
@parkito

If you have mysql, then I would recommend doing this:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "contract_id")
    private int contractId;

those. change strategy to IDENTITY.
And in the 'Contract' table in the database, add AUTO_INCREMENT PRIMARY KEY so that mysql generates the keys itself.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question