#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. Я пробовал, но это не работает, проверьте журналы, которые я обновил в основном сообщении….