Не удалось сохранить запись модели с автоматически сгенерированным идентификатором - PullRequest
0 голосов
/ 26 марта 2019

Я пытался сохранить новую строку в БД, как это

@SuppressWarnings("unchecked")
@Modifying 
public SMSIncoming save(@Param("smsIncoming") SMSIncoming smsIncoming); 

здесь я не устанавливаю Id, как показано ниже: -

 SMSIncoming smsIncoming = new SMSIncoming();
 smsIncoming.setSender("6476963460");
 smsIncoming.setReceiver("6475603720");
 smsIncoming.setMsg("Testing Incoming messages");

 @Id
 @GeneratedValue
 private Long id;

Это должно быть автоматически сгенерировано при сохранении до

@SuppressWarnings("unchecked")
@Modifying  
public SMSIncoming save(@Param("smsIncoming") SMSIncoming smsIncoming);

JpaRepository<SMSIncoming, Long>

но и здесь я получаю множество исключений, я перепробовал все варианты (AUTO, TABLE, SEQUENCE и IDENTITY), но не смог получить их, поэтому в следующий раз я подумал получить максимальный идентификатор из таблицы и сохранить его, увеличивая его. В этом подходе я также сталкиваюсь с проблемами.

Выпуск трассировок при сохранении с ключевым словом IDENTITY в id: -

 `2019-03-26 11:32:15.347  INFO 5828 --- [           main] 
c.a.s.service.SmsPluginApplicationTests  : --Application Started--
 smsrec.toString():::::::com.avaal.sms.model.SMSIncoming@4c6bba7d
 Hibernate: insert into dbo.ozekimessagein (id, msg, msgtype, operator, 
  receivedtime, receiver, reference, sender, senttime) values (null, ?, ?, 
 ?, ?, ?, ?, ?, ?)
 2019-03-26 11:32:16.029  WARN 5828 --- [           main] 
  o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 339, SQLState: S0001
 2019-03-26 11:32:16.029 ERROR 5828 --- [           main] 
 o.h.engine.jdbc.spi.SqlExceptionHelper   : DEFAULT or NULL are not allowed 
as explicit identity values.
  Inside test catch block::::::::::
     org.springframework.dao.InvalidDataAccessResourceUsageException: could 
   not execute statement; SQL [n/a]; nested exception is 
   org.hibernate.exception.SQLGrammarException: could not execute statement
at  org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:279)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527)
at  org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:135)
at    

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) на
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:93)

Выпуск трассировок при сохранении с ключевым словом SEQUENCE или AUTO в id: -

`@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE/AUTO)
private long id;`

smsrec.toString():::::::com.avaal.sms.model.SMSIncoming@5d717f19 Hibernate: call next value for hibernate_sequence 2019-03-26 12:29:06.493 WARN 15412 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 102, SQLState: S0001 2019-03-26 12:29:06.494 ERROR 15412 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Incorrect syntax near 'value'. Inside test catch block:::::::::: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:279) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253)

Выпуск трассировок при сохранении с ключевым словом TABLE в id: -

`@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;`



 `smsrec.toString():::::::com.avaal.sms.model.SMSIncoming@69e2fe3b
  Hibernate: select tbl.next_val from hibernate_sequences tbl where 
 tbl.sequence_name=? for update
 2019-03-26 12:33:33.157 ERROR 15896 --- [main] 
  o.hibernate.id.enhanced.TableGenerator   : HHH000351: Could not read or 
  init a hi value com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR.   at 

com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (SQLServerException.java:259) ~ [mssql-jdbc-6.4.0.jre8.jar: na] в com.microsoft.sqlserver.jdbc.SQLServerStatement.Ne ( SQLServerStatement.java:1547) ~ [mssql-jdbc-6.4.0.jre8.jar: na] по адресу com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement (SQLServerPreparedStatement.java:5ql-jdb6.0-md jbd5.0-md) .jre8.jar: на] `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...