Не удается сохранить запись модели с автоматически сгенерированным идентификатором

#sql #sql-server #spring-boot

#sql #sql-сервер #весенняя загрузка

Вопрос:

Я попытался сохранить новую строку в DB следующим образом

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

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

  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.продолжить (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.getNextResult(SQLServerStatement.java:1547) ~ [mssql-jdbc-6.4.0 .jre8.jar:na] в com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:548) ~[mssql-jdbc-6.4.0.jre8.jar:na]`

Комментарии:

1. Попробуйте @GeneratedValue(стратегия = GenerationType. АВТОМАТИЧЕСКИ) для идентификатора

2. @Santosh @GeneratedValue = @GeneratedValue(strategy = GenerationType.AUTO) АВТО — это стратегия по умолчанию.

3. Я пробовал, но это не работает, проверьте журналы, которые я обновил в основном сообщении….