I am new to spring and spring boot. I tried to build a project by following an example I found here : http://www.javaguides.net/2018/09/spring-mvc-using-spring-boot2-jsp-jpa-hibernate5-mysql-example.html.
Here is my Application:
package com.SportyShoe;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@ComponentScan(basePackages = "com.SportyShoe")
@SpringBootApplication
@EntityScan("com.SportyShoe.*")
@EnableJpaRepositories
public class SportyShoeApplication {
public static void main(String[] args) {
SpringApplication.run(SportyShoeApplication.class, args);
}
}
Here is my Entity:
package com.SportyShoe.Entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Shoe")
public class Shoe {
@Id
@Column(name="id")
private String id;
@Column(name="colour")
private String colour;
@Column(name="gender")
private String gender;
@Column(name="category")
private String category;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
Here is my Repository:
package com.SportyShoe.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.SportyShoe.Entity.Shoe;
@Repository
public interface ShoeRepositories extends JpaRepository<Shoe, Integer>{
}
Here is my Controller:
package com.SportyShoe.controllers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.SportyShoe.repositories.ShoeRepositories;
@Controller
public class ShoeController {
@Autowired
ShoeRepositories shoeRepo;
@RequestMapping("/shoes")
public String shoeList(Model model) {
model.addAttribute("shoes", shoeRepo.findAll());
return "shoes";
}
}
Here is my application.properties:
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
logging.level.org.springframework=INFO
################### DataSource Configuration ##########################
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/Sporty_Shoes
spring.datasource.username=root
spring.datasource.password=MPword@123
################### Hibernate Configuration ##########################
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
When I reached this point in the example, it was written that running the Application will create the table in the database but all I got was an error as mentioned in the title.
What should do now to make it work?
I guess this comment is the key.
When I used 2.7.2 instead of 3.0.0(SnapShot) which I originally used it started working.
Reading the documentation we realize the Spring Boot JPA
module part of the Spring Boot 3
release turned to work with Jakarta Persistence API (JPA) rather than with javax.persistence.api
. Because of this even configuring properly the Spring JPA
annotations like @EntityScan
it does not find the entities.
When upgrading Spring Boot
up to version 3, the Persistence API
artifact must be also migrated.
For more context about this change, it's well explained in this other SO thread.
Hope it helps anyone else!
The main problem was the version of Spring boot I used.
When I used 2.7.2 instead of 3.0.0(SnapShot) which I originally used it started working.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With