I am implementing Spring Data with Redis cache, MySQL, JPA Hibernate CRUD API . Caching is not working for controllers I used and not reflecting but for GetMapping and PostMapping it's working because I am not using any cache configuration, but the other three controllers which I configured with cache, I get connection refused. I didn't install any Redis cache in local. Is it required to install Redis cache for this because I'm using Redis for cache.
Controller
package com.example.redis.springbootrediscache.controller;
import com.example.redis.springbootrediscache.ResouceNotFoundException;
import com.example.redis.springbootrediscache.model.Employee;
import com.example.redis.springbootrediscache.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
#RestController
#RequestMapping("/api")
public class EmployeeController {
#Autowired
private EmployeeRepository employeeRepository;
#PostMapping("/employees")
public Employee addEmployee(#RequestBody Employee employee) {
return employeeRepository.save(employee);
}
#GetMapping("/employees")
public ResponseEntity<List<Employee>> getAllEmployees() {
return ResponseEntity.ok(employeeRepository.findAll());
}
#GetMapping("employees/{employeeId}")
#Cacheable(value = "employees",key = "#employeeId")
public Employee findEmployeeById(#PathVariable(value = "employeeId") Integer employeeId) {
System.out.println("Employee fetching from database:: "+employeeId);
return employeeRepository.findById(employeeId).orElseThrow(
() -> new ResouceNotFoundException("Employee not found" + employeeId));
}
#PutMapping("employees/{employeeId}")
#CachePut(value = "employees",key = "#employeeId")
public Employee updateEmployee(#PathVariable(value = "employeeId") Integer employeeId,
#RequestBody Employee employeeDetails) {
Employee employee = employeeRepository.findById(employeeId)
.orElseThrow(() -> new ResouceNotFoundException("Employee not found for this id :: " + employeeId));
employee.setName(employeeDetails.getName());
final Employee updatedEmployee = employeeRepository.save(employee);
return updatedEmployee;
}
#DeleteMapping("employees/{id}")
#CacheEvict(value = "employees", allEntries = true)
public void deleteEmployee(#PathVariable(value = "id") Integer employeeId) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(
() -> new ResouceNotFoundException("Employee not found" + employeeId));
employeeRepository.delete(employee);
}
}
Employee
package com.example.redis.springbootrediscache.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
#Data
#AllArgsConstructor
#NoArgsConstructor
#Entity
public class Employee implements Serializable {
#Id
#GeneratedValue
private int id;
private String name;
}
SpringBootApplication
package com.example.redis.springbootrediscache;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
#SpringBootApplication
#EnableCaching
public class SpringbootRedisCacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRedisCacheApplication.class, args);
}
}
application.yaml
spring:
cache:
type: redis
redis:
time-to-live: 60000
cache-null-values: true
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/TradeX
username: postgres
password: admin
hikari:
initialization-fail-timeout: 0
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
generate-ddl: true
show-sql: true
hibernate:
ddl-auto: create
server:
port: 8087
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.redis</groupId>
<artifactId>springboot-redis-cache</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-redis-cache</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Related
I'm new to coding and I was creating a sample springboot application. In get mapping I wanted to display all the items. I'm using JAVAX persistence. but I'm getting an error like
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'homeController' defined in file [C:\Users\TheCanner\Desktop\exchangers\exchangers\target\classes\com\ecommerce\exchangers\controller\HomeController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'itemServiceImpl' defined in file [C:\Users\TheCanner\Desktop\exchangers\exchangers\target\classes\com\ecommerce\exchangers\Servises\impl\ItemServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'itemsRepo' defined in com.ecommerce.exchangers.repository.ItemsRepo defined in #EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Not a managed type: class com.ecommerce.exchangers.entity.Items"
Controller file
package com.ecommerce.exchangers.controller;
import com.ecommerce.exchangers.Servises.ItemService;
import com.ecommerce.exchangers.payload.ItemsDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
#RestController
#RequestMapping("/")
public class HomeController {
private ItemService itemService;
public HomeController(ItemService itemService) {
this.itemService = itemService;
}
#PostMapping("home")
public ResponseEntity<ItemsDto> addItem(#RequestBody ItemsDto itemsDto){
return new ResponseEntity<>(itemService.addItem(itemsDto), HttpStatus.CREATED);
}
}
Entity file
package com.ecommerce.exchangers.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import javax.persistence.*;
#Data
#NoArgsConstructor
#AllArgsConstructor
#Entity
#EnableJpaRepositories
#Table(name = "Items", uniqueConstraints = { #UniqueConstraint(columnNames = { "itemId" }) })
public class Items {
#Id
#GeneratedValue(strategy = GenerationType.AUTO)
private Integer itemId;
#Column(name = "Item Category", nullable = false)
private Integer itemPrice;
#Column(name = "Item Category", nullable = false)
private Double itemRating;
#Column(name = "Item Category", nullable = false)
private String itemName;
#Column(name = "Item Category", nullable = false)
private String itemCategory;
}
payload file
package com.ecommerce.exchangers.payload;
import lombok.Data;
#Data
public class ItemsDto {
private int itemId;
private int itemPrice;
private double itemRating;
private String itemName;
private String itemCategory;
}
repository file
package com.ecommerce.exchangers.repository;
import com.ecommerce.exchangers.entity.Items;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
#Repository
public interface ItemsRepo extends JpaRepository<Items,Integer> {
}
service impl file
package com.ecommerce.exchangers.Servises.impl;
import com.ecommerce.exchangers.Servises.ItemService;
import com.ecommerce.exchangers.entity.Items;
import com.ecommerce.exchangers.payload.ItemsDto;
import com.ecommerce.exchangers.repository.ItemsRepo;
import org.springframework.stereotype.Service;
#Service
public class ItemServiceImpl implements ItemService {
private ItemsRepo itemsRepo;
public ItemServiceImpl(ItemsRepo itemsRepo) {
this.itemsRepo = itemsRepo;
}
// Here you have to convert entity into DTO
private ItemsDto mapToDTO(Items items){
ItemsDto itemsDto = new ItemsDto();
itemsDto.setItemId(items.getItemId());
itemsDto.setItemName(items.getItemName());
itemsDto.setItemCategory(items.getItemCategory());
itemsDto.setItemPrice(items.getItemPrice());
itemsDto.setItemRating(items.getItemRating());
return itemsDto;
}
// Here you have to convert entity into DTO
private Items mapToEntity(ItemsDto itemsDto){
Items items = new Items();
items.setItemId(itemsDto.getItemId());
items.setItemName(itemsDto.getItemName());
items.setItemCategory(itemsDto.getItemCategory());
items.setItemPrice(itemsDto.getItemPrice());
items.setItemRating(itemsDto.getItemRating());
return items;
}
#Override
public ItemsDto addItem(ItemsDto itemsDto) {
Items newItem;
newItem = mapToEntity(itemsDto);
Items newItem2 = itemsRepo.save(newItem);
ItemsDto DtoResponse;
DtoResponse = mapToDTO(newItem2);
return DtoResponse;
}
}
Servises file
package com.ecommerce.exchangers.Servises;
import com.ecommerce.exchangers.payload.ItemsDto;
public interface ItemService {
ItemsDto addItem(ItemsDto itemsDto);
}
springBootApplication file
package com.ecommerce.exchangers;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
#SpringBootApplication
public class ExchangersApplication {
public static void main(String[] args) {
SpringApplication.run(ExchangersApplication.class, args);
}
}
application.properties file
spring.datasource.url = jdbc:mysql://localhost:3306/ecommproj?useSSL=false&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root
#hibernate property
#MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
#Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ecommerce</groupId>
<artifactId>exchangers</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>exchangers</name>
<description>Demo project using Spring Boot Rest API, MySQL and Kafka (JVM)</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>3.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-http</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-ws</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
errors are like this ( and I also mentioned that above)
I am using H2 inMemory database for my springboot application.Below is my application.properties content:
spring.datasource.url=jdbc:h2:~/test5
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username= sa
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto= update
spring.h2.console.enabled=true
spring.mvc.format.date-time=iso
server.port=8080
And here below is my entity:
package aero.tav.tams.roster.model;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.tomcat.jni.Local;
import org.hibernate.annotations.Fetch;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
#Entity
#Table(name="Flight")
#Data
#NoArgsConstructor
public class Flight {
#Id
#GeneratedValue(strategy = GenerationType.AUTO)
private long id;
#ManyToOne(fetch=FetchType.LAZY)
#JoinColumn(foreignKey= #ForeignKey(name="TKFlight"), name="Airline_id", referencedColumnName = "id")
private Airline airline;
#Column(name="Flight No")
private String flightNo;
#ManyToOne(fetch= FetchType.LAZY)
#JoinColumn(foreignKey = #ForeignKey(name="TKFlightAircraft"), name="Aircraft_id", referencedColumnName = "id")
private Aircraft aircraft;
#Column(name="FlightLeg")
private ArrDepEnum flightLeg;
#Column(name="FlightDate")
private LocalDate flightDate;
#ManyToOne(fetch=FetchType.LAZY)
#JoinColumn(foreignKey = #ForeignKey(name="TKStation"), name="station_id", referencedColumnName = "id")
private Station station;
#ManyToOne(fetch=FetchType.LAZY)
#JoinColumn(foreignKey= #ForeignKey(name="TKOriginStation"), name="OriginStation_id", referencedColumnName = "id")
private Station originStation;
#Column(name="CreTime")
private LocalDateTime creTime;
#Column(name="UpdateTime")
private LocalDateTime updateTime;
#Column(name="UpdateUser")
private String updateUser;
public Flight(
Airline airline,
String flightNo,
Aircraft aircraft,
ArrDepEnum flightLeg,
LocalDate flightDate,
Station station,
Station originStation,
LocalDateTime creTime,
LocalDateTime updateTime) {
this.airline = airline;
this.flightNo = flightNo;
this.aircraft = aircraft;
this.flightLeg = flightLeg;
this.flightDate = flightDate;
this.station = station;
this.originStation = originStation;
this.creTime = creTime;
this.updateTime = updateTime;
}
}
My pom.xml content:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>aero.tav.tams</groupId>
<artifactId>roster</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>name</name>
<description>example</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${project.parent.version}</version>
</plugin>
</plugins>
</build>
</project>
The Errors I get:
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null
What do I do wrong? is it about version problem?
I need to create a fat jar that can hit to database and save the obtained files into the directory in the server. The server can only run Java 6 (1.6). Thus, I created a spring project with this pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.app.newapp</groupId>
<artifactId>fileprocessing</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>editformpemrek</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.6</java.version>
<tomcat.version>7.0.59</tomcat.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven</id>
<url>https://repo1.maven.org/maven2</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Then I make the main class to be like this to try:
#SpringBootApplication
public class FormAssignmentApplication implements CommandLineRunner {
private static final Logger logger = Logger.getLogger("FormAssignmentApplication");
#Autowired
FormService service;
public static void main(String[] args) {
new SpringApplicationBuilder(FormAssignmentApplication.class)
.run(args);
}
#Override
public void run(String... args) throws Exception {
System.out.println(service.findAll());
}
}
Here is my service:
#Service
public class FormService {
#Autowired
FormRepository formRepo;
public List<FormAssignment> findAll() {
return formRepo.findAll();
}
}
And here is my repository:
public interface FormRepository extends JpaRepository<FormAssignment, Long> {
List<FormAssignment> findAll();
}
The model/entity/POJO has this shape:
package com.bca.oasys.editformpemrek.model;
import javax.persistence.*;
import java.sql.Timestamp;
#Entity
#Table(name = "ASSIGNMENT_FORM")
public class FormAssignment {
#Id
#Column(name = "id")
private Long id;
#Column(name = "student_id")
private String studentId;
#Column(name = "submitted_file")
private byte[] doc;
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public byte[] getDoc() {
return doc;
}
public void setDoc(byte[] doc) {
this.doc = doc;
}
public void setId(Long id) {
this.id = id;
}
#Id
#GeneratedValue
public Long getId() {
return id;
}
}
In this case, studentId is not ID in the table.
I ran those kind of code (except the pom) at Java 8 properly, then I changed the dependencies to suit the Java 6, and I got this exception chain:
Caused by: org.springframework.orm.jpa.JpaSystemException: could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:310)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:221)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:122)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at $Proxy46.findAll(Unknown Source)
at com.app.newapp.fileprocessing.service.FormService.findAll(FormService.java:22)
at com.app.newapp.fileprocessing.FormAssignmentApplication.run(FormAssignmentApplication.java:53)
at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:672)
... 4 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.loader.Loader.doList(Loader.java:2557)
at org.hibernate.loader.Loader.doList(Loader.java:2540)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
at org.hibernate.loader.Loader.list(Loader.java:2365)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)
at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:416)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:401)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:373)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
... 14 more
Caused by: java.sql.SQLException: Fail to convert to internal representation
at oracle.jdbc.driver.CharCommonAccessor.getBoolean(CharCommonAccessor.java:185)
at oracle.jdbc.driver.T4CVarcharAccessor.getBoolean(T4CVarcharAccessor.java:794)
at oracle.jdbc.driver.OracleResultSetImpl.getBoolean(OracleResultSetImpl.java:640)
at oracle.jdbc.driver.OracleResultSet.getBoolean(OracleResultSet.java:390)
at org.hibernate.type.descriptor.sql.BitTypeDescriptor$2.doExtract(BitTypeDescriptor.java:75)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1696)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1628)
at org.hibernate.loader.Loader.getRow(Loader.java:1515)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:726)
at org.hibernate.loader.Loader.processResultSet(Loader.java:953)
at org.hibernate.loader.Loader.doQuery(Loader.java:921)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
at org.hibernate.loader.Loader.doList(Loader.java:2554)
... 39 more
What should I do? Because I am quite new in Spring, and I didn't get any error in my IDE. While checking the stacktrace of error, I also stuck and can't find the root cause. I just see that it can't execute the findAll query, but I wonder which thing I had been wrong. I also had already put the database spec (conn string, username, and password) in application.properties. The thing is this code could run properly when I tried in java 8. Any help is greatly appreciated. Thanks.
JpaRepository<FormAssignment, String> - here you have mentioned that your primary key is of String type but in your entity class you have annotated the id Variable with #id which is of type Long. I think you have to update this to
JpaRepository<FormAssignment, Long>
check column data types, in your DB, and entity datatypes. They must be same.
I am learning Spring, Hibernate and PostgreSQL. I have an entity that has the field of the timestamp. A database column of this timestamp is called datecreated.
This timestamp should be generated automatically but is not. While inserting a record, null value is generated only, instead of the date.
I tried many combination of solutions that are on internet, but I not succeeded. I tried this:
#CreationTimestamp
private Date dateCreated;
#CreationTimestamp
#Column
private Date dateCreated;
#CreationTimestamp
#Column
private Date dateCreated = new Date();
#CreationTimestamp
#Temporal(TemporalType.TIMESTAMP)
#Column
private Date dateCreated = new Date();
#Temporal(TemporalType.TIMESTAMP)
#Column
private Date dateCreated = new Date();
#Temporal(TemporalType.TIMESTAMP)
#Column(updatable = false)
private Date dateCreated = new Date();
#CreationTimestamp
#Temporal(TemporalType.TIMESTAMP)
#Column(updatable = false)
private Date dateCreated = new Date();
#CreationTimestamp
#Temporal(TemporalType.TIMESTAMP)
#Column(updatable = false)
private Date dateCreated;
#CreationTimestamp
#Temporal(TemporalType.TIMESTAMP)
#Column(updatable = false)
private Date dateCreated;
#PrePersist
protected void onCreate() {
dateCreated = new Date();
}
This is what I am getting:
How to make it generate the timestamps?
Here you are a project files Image.java model, pom.xml, import.sql ddl, hibernate.cfg.xml files:
Image.java
package com.howtodoinjava.demo.spring.domain;
import javax.persistence.*;
import java.util.Date;
import org.hibernate.annotations.CreationTimestamp;
#Entity
#Table(name = "images")
public class Image {
#Id
#GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
#Column(nullable = false, length = 300)
private String title;
#Column(nullable = false)
private String url;
#Column(nullable = false)
private String author;
#CreationTimestamp
#Column
private Date dateCreated = new Date();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getDate() {
return dateCreated;
}
public void setDate(Date dateCreated) {
this.dateCreated = dateCreated;
}
public Image() {}
public Image(Long id, String title, String url, String author) {
this.id = id;
this.title = title;
this.url = url;
this.author = author;
}
#Override
public String toString() {
return "Post{" +
"id=" + id +
", title='" + title + '\'' +
", url='" + url + '\'' +
", author=" + author +
", date=" + dateCreated +
'}';
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bitMiners</groupId>
<artifactId>pdf-app</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aspect.version>1.9.2</aspect.version>
<jackson.version>2.9.8</jackson.version>
<hibernate.version>5.4.2.Final</hibernate.version>
<hibernate.validator.version>6.0.13.Final</hibernate.validator.version>
<c3p0.version>0.9.5.2</c3p0.version>
</properties>
<dependencies>
<!-- servlets and jps -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!--hibernate-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Hibernate-C3P0 Integration -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- validation -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<!-- for rest services -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- For Aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspect.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspect.version}</version>
</dependency>
<!-- To Send Email -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!--logging-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
</dependency>
<!-- PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.16</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<!-- To define the plugin version in your parent POM -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- To use the plugin goals in your POM or parent POM -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
import.sql
This file is placed in a path: src/main/resources/import.sql and it is automatically executed when running the project. This is taken from a tutorial https://dzone.com/articles/spring-security-5-form-login-with-database-provide
-- ...
INSERT INTO images (title, url, author) VALUES ('lanszaft', 'https://i.imgur.com/sZ64fVI.jpg', 'Oskar KamiĆski');
INSERT INTO images (title, url, author) VALUES ('kobieta w kapeluszu', 'https://i.imgur.com/spMsvHe.png', 'Pablo Picasso');
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.archive.autodetection">class,hbm</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property> <!-- BD Mane -->
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.username">user32</property>
<property name="hibernate.connection.password">pa$$word</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>
<property name="hibernate.connection.pool.size">1</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.enable_lazy_load_no_trans">true</property>
<property name="hibernate.jdbc.lob.non_contextual_creation">true</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">150</property>
<mapping class="com.howtodoinjava.demo.spring.domain.User"/>
<mapping class="com.howtodoinjava.demo.spring.domain.Authority"/>
<mapping class="com.howtodoinjava.demo.spring.domain.AuthorityType"/>
<mapping class="com.howtodoinjava.demo.spring.domain.Image"/>
</session-factory>
</hibernate-configuration>
The prePersist and other #createTimeStamp hooks works if you are making inserts from within the application by using the JPA or native hibernate methods. If you simply run inserts from outside your application context, there is no way hibernate would come to know what DMLs are running and hence the hooks will never be called. If you want that even from outside when you run the inserts, the timestamp for create should auto populate, you would need to add table level DDL instructions.
Eg: ALTER TABLE mytable ALTER COLUMN datecreated SET DEFAULT now();
Now as to auto DDL ability of hibernate, the xml property <property name="hibernate.hbm2ddl.auto">create</property> generates DDL from entity definitions but not DMLs. So, you can also embed the DEFAULT timestamp value in column definition of the concerned entity as so or similar:
#Column(name="datecreated", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
This will ensure that when the table is created, the definition is applied using the auto DDL property of hibernate settings.
Hope this clarifies
In your image model class, use timestamp
#CreationTimestamp
#Column
private Timestamp timestamp;
Springboot inserting null values in if i use crud repository even though everything configured correctly and hibernate queries are executing in console but if we check database values for amount and category are inserted as NULL values
Ticket.java
package com.vinay.api.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
#Entity
#Table(name = "Ticket")
#Getter
#Setter
#NoArgsConstructor
#AllArgsConstructor
#ToString
public class Ticket {
#Id
#GeneratedValue
private int id;
private double amount;
private String category;
}
TicketDao.java
package com.vinay.api.dao;
import org.springframework.data.repository.CrudRepository;
import com.vinay.api.model.Ticket;
public interface TicketDao extends CrudRepository<Ticket, Integer>{
}
TicketController.java
package com.vinay.api.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.vinay.api.dao.TicketDao;
import com.vinay.api.model.Ticket;
#RestController
#RequestMapping("/tickets")
public class TicketController {
#Autowired
private TicketDao ticketDao;
#PostMapping("/bookTickets")
public String bookTicket(#RequestBody List<Ticket> tickets)
{
ticketDao.saveAll(tickets);
return "tickets booked: "+tickets.size();
}
#GetMapping("/getTickets")
public List<Ticket> getTickets()
{
return (List<Ticket>) ticketDao.findAll();
}
}
SpringMysqlApplication.java
package com.vinay.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
#SpringBootApplication
public class SpringMysqlApplication {
public static void main(String[] args) {
SpringApplication.run(SpringMysqlApplication.class, args);
}
}
application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/ticket
spring.datasource.username= root
spring.datasource.password=
spring.jpa.show-sql= true
spring.jpa.hibernate.ddl-auto= update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-mysql</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-mysql</name>
<description>Springboot mysql</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
I am able to solve this issue i didn't configure lambok in my IDE so i used manual getters and setters removed the #getter and #Setter annotations helped me to solve this issue
Try specifying generation type stretegy.
#GeneratedValue(strategy=GenerationType.AUTO)
Also use wrapper class instead of primitive datatype. Change int to Integer.
private Integer id