我需要帮助解决这个 JDBC 异常错误,如何解决这个问题?

Posted

技术标签:

【中文标题】我需要帮助解决这个 JDBC 异常错误,如何解决这个问题?【英文标题】:I need help solving this JDBC Exception Error, does anyone know how to solve this?我需要帮助解决这个 JDBC 异常错误,有谁知道如何解决这个问题? 【发布时间】:2019-05-22 19:36:41 【问题描述】:

我想在控制器方法中创建一个新的角色对象,然后显示链接到 Hibernate/H2 数据库的数据存储库中的所有“角色”,但每次我尝试创建一个新对象时,我都会得到一个 SQL对我来说似乎不正确的错误。如果有人可以提供帮助,那就太好了。

这里是回购 - https://github.com/danielturato/InstaTeam-th

对于角色实体,我已经尝试过:

    将名称字段上方的@NotEmpty 更改为@NotNull,反之亦然 添加和删除了覆盖的 Equals、HashCode 和 toString 方法 在角色中添加了一个构建器类(不起作用)

Role.java

@Entity
public class Role 

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@NotEmpty
private String name;

public Role() 

public int getId() 
    return id;


public void setId(int id) 
    this.id = id;


public String getName() 
    return name;


public void setName(String name) 
    this.name = name;


@Override
public boolean equals(Object o) 
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Role role = (Role) o;
    return id == role.id &&
            Objects.equals(name, role.name);


@Override
public int hashCode() 
    return Objects.hash(id, name);


@Override
public String toString() 
    return "Role" +
            "id=" + id +
            ", name='" + name + '\'' +
            '';

RoleController.java:

@Controller
public class RoleController 

@Autowired
private RoleServiceImpl roleService;

@RequestMapping("/roles")
public String viewAllRoles(ModelMap model) 
    Role r = new Role();
    r.setName("test");
    roleService.save(r);
    List<Role> roles = roleService.findAll();
    model.put("roles", roles);

    if (!model.containsAttribute("role")) 
        model.put("role", new Role());
    

    return "roles";

预期:

当我进入/roles时,每次都会创建一个新的角色,然后所有已经在数据库中的角色都会显示在网页上

实际:

我收到一个错误

org.h2.jdbc.jdbcsqlexception:数据转换错误转换“'test'(项目:id整数默认值(publice.ystem_sequence_098e5d98_0ca5_42e8_bc1b_0e5f5aef4194)not null null_to_default序列public.system_sequence_098e5d98_0ca5_42e8_bc1b_0e5f5aef4194)”; SQL 语句: 插入角色(id,名称)值(null,?)[22018-197] 在 org.h2.engine.SessionRemote.done(SessionRemote.java:623) ~[h2-1.4.197.jar:1.4.197] 在 org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) ~[h2-1.4.197.jar:1.4.197] 在 org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:199) ~[h2-1.4.197.jar:1.4.197] 在 org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:153) ~[h2-1.4.197.jar:1.4.197] 在 org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) ~[tomcat-dbcp-9.0.14.jar:9.0.14] 在 org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) ~[tomcat-dbcp-9.0.14.jar:9.0.14] 在 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:57) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:42) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3083) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3676) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:375) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:200) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:131) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:681) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:673) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:668) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final] 在 com.danielturato.dao.BaseDao.save(BaseDao.java:41) ~[main/:na] 在 com.danielturato.dao.BaseDao$$FastClassBySpringCGLIB$$c2478dae.invoke() ~[main/:na] 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) ~[spring-aop-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 com.danielturato.dao.RoleDaoImpl$$EnhancerBySpringCGLIB$$6e10127a.save() ~[main/:na] 在 com.danielturato.service.RoleServiceImpl.save(RoleServiceImpl.java:28) ~[main/:na] 在 com.danielturato.web.RoleController.viewAllRoles(RoleController.java:27) ~[main/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] 在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13] 在 java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]

【问题讨论】:

发布你的表的 DDL 将 int id 更改为 long id 并删除您的策略 .. @GeneratedValue private long id; 我没有 DDL,因为表是自动创建的,但我有这个:gyazo.com/a6a9ff94317f75062498b170d821d5ac 我把int id改成long id并去掉策略,还是出现了同样的错误 给你 - github.com/danielturato/InstaTeam-th @JonathanJohx 【参考方案1】:

似乎问题出在默认系统序列上。您可以创建一个单独的序列,而不是使用 GenerationType.IDENTITY 使用 GenerationType.SEQUENCE

CREATE SEQUENCE role_seq START WITH 1 INCREMENT BY 1;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "roleSeq")
@SequenceGenerator(name = "roleSeq", sequenceName = "role_seq", allocationSize = 1)
private int id;

让我知道这是否有效。

【讨论】:

不幸的是这不起作用,我仍然得到同样的错误

以上是关于我需要帮助解决这个 JDBC 异常错误,如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

jdbc driver class not found错误

使用JDBC出现NoClassDefFoundError异常的解决方法

JDBC连接太多错误

如何解决空数据库表上的乐观并发异常错误

MySQL系统错误,发生系统错误1067错误,针对这个异常问题,解决方案在下面

sun.security.validator.ValidatorException 的 JDBC 异常:PKIX 路径构建失败