После сохранения идентификатора не должно быть нулевой ошибки - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать POC для одного из наших проектов и экспериментирую с весенним модулем jpa data.Я использую базу данных h2, и в базе данных есть только одна таблица.У меня есть объект сущности, который сопоставлен с таблицей.У меня есть тестовый контроллер, который получает объект JSON.Я создал объект сущности из него, и объект сущности был передан в хранилище.У меня есть служба, которая использует метод save () для вставки новой записи в таблицу.Я вижу, что правильный идентификатор генерируется, но операция завершается неудачей с исключением - «после сохранения идентификатор не должен быть нулевым».

Я попробовал все различные комбинации для идентификатора здесь, но я думаю, идентификатор, на который ссылается код, вероятно, является другим идентификатором, о котором я не знаю.В BasicPersistentEntity (весенний класс) есть статический класс AbsentIdentifierAccessor, который вызывается для идентификатора.

закрытый статический класс AbsentIdentifierAccessor extends TargetAwareIdentifierAccessor {

    public AbsentIdentifierAccessor(Object target) {
        super(target);
    }

    /*
     * (non-Javadoc)
     * @see org.springframework.data.mapping.IdentifierAccessor#getIdentifier()
     */
    @Override
    @Nullable
    public Object getIdentifier() {
        return null;
    }
}

У кого-нибудь была похожая проблема с использованием методов репозитория?Любые идеи здесь будут полезны здесь.

@Repository
public interface TimeSheetRepository extends JpaRepository<Timesheet,  Long> {

}

@Entity
@Table(name = "Timesheet")
public class Timesheet implements Serializable {

private static final long serialVersionUID = 7157684222538550301L;

@Id
@GeneratedValue
private Long timesheet_entry_id;

@Column(length = 100,nullable = false)
private String client;

@Column(length = 100,nullable = false)
private String project;

public Long getTimesheet_entry_id() {
    return timesheet_entry_id;
}

public void setTimesheet_entry_id(Long timesheet_entry_id) {
    this.timesheet_entry_id = timesheet_entry_id;
}
}

трассировка стека: java.lang.IllegalArgumentException: после сохранения идентификатор не должен быть нулевым в org.springframework.util.Assert.notNull (Assert.java:198) ~ [spring-core-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.data.jdbc.core.JdbcAggregateTemplate.save (JdbcAggregateTemplate.java:109) ~ [spring-data-jdbc-1.0.10.RELEASE.jar:1.0.10.RELEASE] at org.springframework.data.jdbc.repository.support.SimpleJdbcRepository.save (SimpleJdbcRepository.java:45) ~ [spring-data-jdbc-1.0.10.RELEASE.jar: 1.0.10.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] at sun.reflect.DelegatingMetholAmpor (Неизвестный источник) ~ [na: 1.8.0_151] в java.lang.reflect.Method.invoke (Неизвестный источник) ~ [na: 1.8.0_151] в org.springframework.data.repository.core.support.RepositoryComposition $ RepositoryFragments.invoke (RepositoryComposition.java:359) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] at org.springframework.data.repository.core.support.RepositoryComposition.invoke (RepositoryComposition.java:200) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] в org.springframework.data.repository.core.support.RepositoryFactorySupport $ ImplementMethodExecutionInterceptor.invoke (RepositoryFactorySupport.java:644) ~ [spring-data-commons-2.1.10jar: 2.1.10.REE.10.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframe.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.doInvoke (RepositoryFactorySupport.java:608) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] в org.spring.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.lambda $ invoke $ 3 (RepositoryFactorySupport.java:595) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] at org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke (RepositoryFactorySupport.java:595) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.REL.springframework.aop.framework.ReflectiveMethodInvocation..java: 59) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) ~ [spring-АОП-5.1.9.RELEASE.jar: 5.1.9.RELEASE]в org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:295) ~ [spring-tx-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.toractionInceptor.invoke (TransactionInterceptor.java:98) ~ [spring-tx-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186 ~ [spring]-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor.java:139) ~ [spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframe.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:93) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.data.repository.core.roundTextorStore.invoke (SurroundingTransactionDetectorMethodInterceptor.java:61) ~ [spring-data-commons-2.1.10.RELEASE.jar: 2.1.10.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (Reflective) 18)~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:212) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] на com.sun.proxy. $ Proxy102.save (неизвестный источник) ~ [na: na] на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_151]at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] at java.lang.reflect.Method.invoke(Неизвестный источник) ~ [na: 1.8.0_151] в org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java:343) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint (ReflectiveMethodInvocation.java:198) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.aop.framework.Reflective: 163) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor.java:139) ~ [spring-tx-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:212) ~ [spring-aop-5.1.9.RELEASE.jar: 5.1.9.RELEASE] на com.sun.proxy. $ Proxy102.сохранить (неизвестный источник) ~ [нет.классы /: na] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_151] в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] в java.lang.reflect.Method.invoke (неизвестный источник) ~ [na: 1.8.0_151] в org.springframework.web.method.support.InvocableHandlerhoho.doInvoke (InvocableHandlerMethod.java:190) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (Invocable_hoj ::[весна-веб-5.1.9.RELEASE.jar: 5.1.9.RELEASE]по адресу org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:104) ~ [spring-webmvc-5.1.9.RELEASE.jel.sra.Re.ReRe.ReR.ReR.ReR.Re.ReR.Re.ReG.ReR.ReR.R.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:892) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springfraletwork.we..method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:797) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.servlet.mvc.methob.handle (AbstractHandlerMethodAdapter.java:87) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:1039) ~ [весна-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:942) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:1005) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] вorg.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:908) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в javax.servlet.http.HttpServlet.serlet (HttpS.java: 660) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:882) ~ [spring-webmvc-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в javax.servlet.http.HttpServlet.service (HttpServlet.java:741) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в орг.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:231) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilter: 166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:53) ~ [tomcat-embed-websocket-9.0.24.jar: 9.0.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.springframework.web.filter.RequestContextFilter.doFilterInternal (RequestContextFilter.java:99) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:11 ~)spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.springframework.web.filter.FormContentFilter.doFilterInternal (FormContentFilter.java:92) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:118) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterCha6.j::~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:93) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:118) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24]в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal (SessionRepositoryFilter.java:151) ~ [spring-session-core-2.1.8.RELEASE.jar: 2.1.8.RELEASE] в org.springframework.session.web.http.OncePerRequestFilter.doFilter (OncePerRequestFilter.jpg) ~ [spring-session-core-2.1.8.RELEASE.jar: 2.1.8.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в орг.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:200) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.springframework.web.filter.OncePerReilteF.java: 118) ~ [spring-web-5.1.9.RELEASE.jar: 5.1.9.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в орг.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValveal): 202) ~ [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:96) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:526) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:139) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:92) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:74) [томcat-embed-core-9.0.24.jar: 9.0.24] at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:343) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:408) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java: 66) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:860) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1587) [tomcat-embed-core-9.0.24.jar: 9.0.24] в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) [tomcat-embed-core-9.0.24.jar: 9.0.24] в java.util.concurrent.ThreadPoolExecutor.runWorker (неизвестный источник)[na: 1.8.0_151] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник) [na: 1.8.0_151] в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) [tomcat-embed-core-9.0.24.jar: 9.0.24] в java.lang.Thread.run (неизвестный источник) [na: 1.8.0_151]

таблица:Расписание CREATE TABLE (timesheet_entry_id BIGINT (5) auto_increment NOT NULL ПЕРВИЧНЫЙ КЛЮЧ, клиент VARCHAR (100), проект VARCHAR (100), код проекта VARCHAR (100), задача VARCHAR (100), число часов, NUMERIC, часыRounded VARCHAR (100), оплата биллинга, счет BOOLEAN, утвержденный BOOLEAN, имя VARCHAR (100), фамилия VARCHAR (100), отдел VARCHAR (100), сотрудник VARCHAR (100), billableRate NUMERIC, costRate NUMERIC, costAmount NUMERIC, валюта VARCHAR (100), extRefURL VAR));

1 Ответ

0 голосов
/ 23 сентября 2019

Используйте стратегию генерации типа и позвольте Hibernate обработать генерацию первичного ключа.

Если вы хотите автоматически увеличить первичный ключ, используйте ниже.

@GeneratedValue(strategy=GenerationType.AUTO)
...