Spring + JPA + Mysql数据库没有返回本机生成的标识值

lsmepo6l  于 2023-06-28  发布在  Mysql
关注(0)|答案(1)|浏览(123)

我是Spring的初学者,我尝试了一个简单的java-mysql持久化示例。

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>mysqlConnect</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <name>mysqlConnect</name>
  10. <description>Demo project for Spring Boot</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.4.3.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-data-jpa</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>mysql</groupId>
  29. <artifactId>mysql-connector-java</artifactId>
  30. <scope>runtime</scope>
  31. </dependency>
  32. <!--<dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>-->
  37. </dependencies>
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

application.properties

  1. spring.datasource.url=jdbc:mysql://localhost:3306/demo
  2. spring.datasource.username=user
  3. spring.datasource.password=password
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Student.java

  1. package com.example.models;
  2. import javax.persistence.*;
  3. @Entity
  4. @Table(name = "Student")
  5. public class Student {
  6. @Id
  7. @GeneratedValue(strategy = GenerationType.AUTO)
  8. private Long id;
  9. private String name;
  10. private String town;
  11. protected Student() {
  12. }
  13. public Student(String name, String town) {
  14. this.name = name;
  15. this.town = town;
  16. }
  17. @Column(name = "id")
  18. public Long getId() {
  19. return id;
  20. }
  21. public void setId(Long id) {
  22. this.id = id;
  23. }
  24. @Column(name = "name")
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31. @Column(name = "town")
  32. public String getTown() {
  33. return town;
  34. }
  35. public void setTown(String town) {
  36. this.town = town;
  37. }
  38. @Override
  39. public String toString() {
  40. return "Student{" +
  41. "town='" + town + '\'' +
  42. ", name='" + name + '\'' +
  43. '}';
  44. }
  45. }

StudnetsServices.java

  1. package com.example.services;
  2. import com.example.models.Student;
  3. import org.springframework.data.repository.CrudRepository;
  4. import java.util.List;
  5. public interface StudentsServices extends CrudRepository<Student, Long> {
  6. List<Student> findByName(String name);
  7. }

application.java

  1. package com.example;
  2. import com.example.models.Student;
  3. import com.example.services.StudentsServices;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.boot.CommandLineRunner;
  7. import org.springframework.boot.SpringApplication;
  8. import org.springframework.boot.autoconfigure.SpringBootApplication;
  9. import org.springframework.context.annotation.Bean;
  10. @SpringBootApplication
  11. public class MysqlConnectApplication {
  12. private static final Logger log = LoggerFactory.getLogger(MysqlConnectApplication.class);
  13. public static void main(String[] args) {
  14. SpringApplication.run(MysqlConnectApplication.class, args);
  15. }
  16. @Bean
  17. public CommandLineRunner demo(StudentsServices repository){
  18. return args -> {
  19. log.info("Saving Tom");
  20. repository.save(new Student("Tom", "London"));
  21. log.info("****************************************************");
  22. log.info("Saving Jerry");
  23. repository.save(new Student("Jerry", "New-york"));
  24. log.info("****************************************************");
  25. log.info("Reeding All");
  26. for (Student student : repository.findAll()){log.info(student.toString());}
  27. log.info("****************************************************");
  28. log.info("Found by name");
  29. for (Student student : repository.findByName("Thuwarakesh")){
  30. log.info(student.toString());
  31. }
  32. log.info("****************************************************");
  33. };
  34. }
  35. }

Mysql中的表

  1. CREATE TABLE IF NOT EXISTS Student(
  2. id INT AUTO_INCREMENT,
  3. name VARCHAR(25),
  4. town VARCHAR(26),
  5. PRIMARY KEY (id)
  6. );

当我完成这个并运行jar文件时,我得到了下面的异常。

  1. java.lang.IllegalStateException: Failed to execute CommandLineRunner
  2. at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  3. at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  4. at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  5. at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  6. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  7. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  8. at com.example.MysqlConnectApplication.main(MysqlConnectApplication.java:18) [classes!/:0.0.1-SNAPSHOT]
  9. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
  10. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
  11. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
  12. at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
  13. at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [mysqlConnect-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
  14. at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [mysqlConnect-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
  15. at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [mysqlConnect-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
  16. at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [mysqlConnect-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
  17. Caused by: org.springframework.orm.jpa.JpaSystemException: The database returned no natively generated identity value; nested exception is org.hibernate.HibernateException: The database returned no natively generated identity value
  18. at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333) ~[spring-orm-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  19. at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) ~[spring-orm-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  20. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491) ~[spring-orm-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  21. at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  22. at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  23. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  24. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  25. at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) ~[spring-data-jpa-1.10.6.RELEASE.jar!/:na]
  26. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  27. at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  28. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  29. at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  30. at com.sun.proxy.$Proxy59.save(Unknown Source) ~[na:na]
  31. at com.example.MysqlConnectApplication.lambda$demo$0(MysqlConnectApplication.java:25) [classes!/:0.0.1-SNAPSHOT]
  32. at com.example.MysqlConnectApplication$$Lambda$7/889729797.run(Unknown Source) ~[na:na]
  33. at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.4.3.RELEASE.jar!/:1.4.3.RELEASE]
  34. ... 14 common frames omitted
  35. Caused by: org.hibernate.HibernateException: The database returned no natively generated identity value
  36. at org.hibernate.id.IdentifierGeneratorHelper.getGeneratedIdentity(IdentifierGeneratorHelper.java:71) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  37. at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:61) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  38. at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:42) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  39. at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2803) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  40. at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3374) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  41. at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  42. at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:619) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  43. at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:273) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  44. at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  45. at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:299) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  46. at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:317) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  47. at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:272) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  48. at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:178) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  49. at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:109) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  50. at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67) ~[hibernate-entitymanager-5.0.11.Final.jar!/:5.0.11.Final]
  51. at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  52. at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  53. at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  54. at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  55. at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  56. at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753) ~[hibernate-core-5.0.11.Final.jar!/:5.0.11.Final]
  57. at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146) ~[hibernate-entitymanager-5.0.11.Final.jar!/:5.0.11.Final]
  58. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
  59. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
  60. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
  61. at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
  62. at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298) ~[spring-orm-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  63. at com.sun.proxy.$Proxy57.persist(Unknown Source) ~[na:na]
  64. at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:506) ~[spring-data-jpa-1.10.6.RELEASE.jar!/:na]
  65. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
  66. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
  67. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
  68. at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
  69. at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503) ~[spring-data-commons-1.12.6.RELEASE.jar!/:na]
  70. at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488) ~[spring-data-commons-1.12.6.RELEASE.jar!/:na]
  71. at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) ~[spring-data-commons-1.12.6.RELEASE.jar!/:na]
  72. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  73. at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.12.6.RELEASE.jar!/:na]
  74. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  75. at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  76. at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  77. at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  78. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  79. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.3.5.RELEASE.jar!/:4.3.5.RELEASE]
  80. ... 24 common frames omitted
pxq42qpu

pxq42qpu1#

检查mysql数据库,这个特定的列可能没有设置为自动增量,只要将其设置为自动增量,它就会开始正常工作

相关问题