diff --git a/persistence-modules/spring-data-jpa-repo-4/pom.xml b/persistence-modules/spring-data-jpa-repo-4/pom.xml index 2995949df3..ceda981de8 100644 --- a/persistence-modules/spring-data-jpa-repo-4/pom.xml +++ b/persistence-modules/spring-data-jpa-repo-4/pom.xml @@ -14,6 +14,11 @@ + + jakarta.persistence + jakarta.persistence-api + 3.1.0 + org.springframework.boot spring-boot-starter-web diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotation.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotation.java new file mode 100644 index 0000000000..fe59f585ac --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotation.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +public class EntityWithJakartaAnnotation { + @Id + private Long id; +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationApplication.java new file mode 100644 index 0000000000..1799ee8a9f --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EntityWithJakartaAnnotationApplication { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationRepository.java new file mode 100644 index 0000000000..e8efdd60db --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithjakartaannotation/EntityWithJakartaAnnotationRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EntityWithJakartaAnnotationRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotation.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotation.java new file mode 100644 index 0000000000..d0e2debb69 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotation.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation; + +import javax.persistence.Id; + +public class EntityWithoutAnnotation { + @Id + private Long id; +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationApplication.java new file mode 100644 index 0000000000..d6e3eb465d --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EntityWithoutAnnotationApplication { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationRepository.java new file mode 100644 index 0000000000..df079be550 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotation/EntityWithoutAnnotationRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EntityWithoutAnnotationRepository + extends JpaRepository { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixed.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixed.java new file mode 100644 index 0000000000..447dcb40c2 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixed.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class EntityWithoutAnnotationFixed { + @Id + private Long id; +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedApplication.java new file mode 100644 index 0000000000..f9537dc9f9 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EntityWithoutAnnotationFixedApplication { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedRepository.java new file mode 100644 index 0000000000..6a2b90fdc7 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/entitywithoutannotationfixed/EntityWithoutAnnotationFixedRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EntityWithoutAnnotationFixedRepository + extends JpaRepository { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/app/WrongEntityScanApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/app/WrongEntityScanApplication.java new file mode 100644 index 0000000000..0addf6e4ea --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/app/WrongEntityScanApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.app; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +@SpringBootApplication +@EnableJpaRepositories(basePackages = + "com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.repository") +public class WrongEntityScanApplication { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/entity/CorrectEntity.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/entity/CorrectEntity.java new file mode 100644 index 0000000000..cf375cabdc --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/entity/CorrectEntity.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.entity; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class CorrectEntity { + @Id + private Long id; +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/fixed/app/WrongEntityScanFixedApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/fixed/app/WrongEntityScanFixedApplication.java new file mode 100644 index 0000000000..1d93c69129 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/fixed/app/WrongEntityScanFixedApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.fixed.app; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +@SpringBootApplication +@EnableJpaRepositories(basePackages = + "com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.repository") +@EntityScan("com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.entity") +public class WrongEntityScanFixedApplication { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/repository/CorrectEntityRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/repository/CorrectEntityRepository.java new file mode 100644 index 0000000000..2ccc1a7784 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/wrongentityscanapplication/repository/CorrectEntityRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.entity.CorrectEntity; + +public interface CorrectEntityRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-repo-4/src/main/resources/application.properties index db4837d8d2..bf1459fb9d 100644 --- a/persistence-modules/spring-data-jpa-repo-4/src/main/resources/application.properties +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/resources/application.properties @@ -1,7 +1,7 @@ +server.port=0 spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password=sa - spring.jpa.properties.hibernate.globally_quoted_identifiers=true logging.level.com.baeldung.spring.data.persistence.search=debug diff --git a/persistence-modules/spring-data-jpa-repo-4/src/test/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/NotManagedTypeExceptionIntegrationTest.java b/persistence-modules/spring-data-jpa-repo-4/src/test/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/NotManagedTypeExceptionIntegrationTest.java new file mode 100644 index 0000000000..cc39443059 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/test/java/com/baeldung/spring/notamanagedtypeexceptioninspringdatajpa/NotManagedTypeExceptionIntegrationTest.java @@ -0,0 +1,66 @@ +package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.springframework.boot.SpringApplication.run; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ConfigurableApplicationContext; + +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation.EntityWithoutAnnotationApplication; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed.EntityWithoutAnnotationFixedApplication; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed.EntityWithoutAnnotationFixedRepository; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation.EntityWithJakartaAnnotationApplication; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.app.WrongEntityScanApplication; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.fixed.app.WrongEntityScanFixedApplication; +import com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.wrongentityscanapplication.repository.CorrectEntityRepository; + +class NotManagedTypeExceptionIntegrationTest { + @Test + void givenEntityWithoutAnnotationApplicationWhenBootstrapThenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(EntityWithoutAnnotationApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenEntityWithoutAnnotationApplicationFixedWhenBootstrapThenRepositoryBeanShouldBePresentInContext() { + ConfigurableApplicationContext context = run(EntityWithoutAnnotationFixedApplication.class); + EntityWithoutAnnotationFixedRepository repository = context + .getBean(EntityWithoutAnnotationFixedRepository.class); + + assertThat(repository).isNotNull(); + } + + @Test + void givenEntityWithJakartaAnnotationApplicationWhenBootstrapThenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(EntityWithJakartaAnnotationApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenWrongEntityScanApplicationWhenBootstrapThenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(WrongEntityScanApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenWrongEntityScanApplicationFixedWhenBootstrapThenRepositoryBeanShouldBePresentInContext() { + ConfigurableApplicationContext context = run(WrongEntityScanFixedApplication.class); + CorrectEntityRepository repository = context + .getBean(CorrectEntityRepository.class); + + assertThat(repository).isNotNull(); + } +}