diff --git a/persistence-modules/spring-data-jpa-repo-4/pom.xml b/persistence-modules/spring-data-jpa-repo-4/pom.xml index 2995949df3..79da23705a 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 + ${jakarta.persistence-api.version} + org.springframework.boot spring-boot-starter-web @@ -142,6 +147,7 @@ 42.7.1 1.0.7 3.7.0 + 3.1.0 \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotation.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotation.java new file mode 100644 index 0000000000..576cb23237 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotation.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtype.jakartaannotation; + +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/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationApplication.java new file mode 100644 index 0000000000..f46547a529 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.jakartaannotation; + +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/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationRepository.java new file mode 100644 index 0000000000..28f8fee328 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/jakartaannotation/EntityWithJakartaAnnotationRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.notamanagedtype.jakartaannotation; + +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/notamanagedtype/missedannotation/EntityWithoutAnnotation.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotation.java new file mode 100644 index 0000000000..261a4f5a0d --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotation.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.missedannotation; + +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/notamanagedtype/missedannotation/EntityWithoutAnnotationApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotationApplication.java new file mode 100644 index 0000000000..ec30b830c9 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotationApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.missedannotation; + +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/notamanagedtype/missedannotation/EntityWithoutAnnotationRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotationRepository.java new file mode 100644 index 0000000000..60c96de0a4 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotation/EntityWithoutAnnotationRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.missedannotation; + +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/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixed.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixed.java new file mode 100644 index 0000000000..c19b9aad6a --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixed.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtype.missedannotationfixed; + +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/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedApplication.java new file mode 100644 index 0000000000..633eb87728 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedApplication.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.missedannotationfixed; + +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/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedRepository.java new file mode 100644 index 0000000000..29748e4b99 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedannotationfixed/EntityWithoutAnnotationFixedRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.notamanagedtype.missedannotationfixed; + +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/notamanagedtype/missedentityscan/app/WrongEntityScanApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/app/WrongEntityScanApplication.java new file mode 100644 index 0000000000..ecca84b234 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/app/WrongEntityScanApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.notamanagedtype.missedentityscan.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/notamanagedtype/missedentityscan/entity/CorrectEntity.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/entity/CorrectEntity.java new file mode 100644 index 0000000000..6d2a033ee9 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/entity/CorrectEntity.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.notamanagedtype.missedentityscan.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/notamanagedtype/missedentityscan/fixed/app/WrongEntityScanFixedApplication.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/fixed/app/WrongEntityScanFixedApplication.java new file mode 100644 index 0000000000..f6f790251e --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/fixed/app/WrongEntityScanFixedApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.notamanagedtype.missedentityscan.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/notamanagedtype/missedentityscan/repository/CorrectEntityRepository.java b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/repository/CorrectEntityRepository.java new file mode 100644 index 0000000000..afcd47b853 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/main/java/com/baeldung/spring/notamanagedtype/missedentityscan/repository/CorrectEntityRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.notamanagedtype.missedentityscan.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.baeldung.spring.notamanagedtype.missedentityscan.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..649c494792 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,6 @@ 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/notamanagedtype/NotManagedTypeExceptionIntegrationTest.java b/persistence-modules/spring-data-jpa-repo-4/src/test/java/com/baeldung/spring/notamanagedtype/NotManagedTypeExceptionIntegrationTest.java new file mode 100644 index 0000000000..64e844d68c --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-4/src/test/java/com/baeldung/spring/notamanagedtype/NotManagedTypeExceptionIntegrationTest.java @@ -0,0 +1,66 @@ +package com.baeldung.spring.notamanagedtype; + +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.notamanagedtype.missedannotation.EntityWithoutAnnotationApplication; +import com.baeldung.spring.notamanagedtype.missedannotationfixed.EntityWithoutAnnotationFixedApplication; +import com.baeldung.spring.notamanagedtype.missedannotationfixed.EntityWithoutAnnotationFixedRepository; +import com.baeldung.spring.notamanagedtype.jakartaannotation.EntityWithJakartaAnnotationApplication; +import com.baeldung.spring.notamanagedtype.missedentityscan.app.WrongEntityScanApplication; +import com.baeldung.spring.notamanagedtype.missedentityscan.fixed.app.WrongEntityScanFixedApplication; +import com.baeldung.spring.notamanagedtype.missedentityscan.repository.CorrectEntityRepository; + +class NotManagedTypeExceptionIntegrationTest { + @Test + void givenEntityWithoutAnnotationApplication_whenBootstrap_thenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(EntityWithoutAnnotationApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenEntityWithoutAnnotationApplicationFixed_whenBootstrap_thenRepositoryBeanShouldBePresentInContext() { + ConfigurableApplicationContext context = run(EntityWithoutAnnotationFixedApplication.class); + EntityWithoutAnnotationFixedRepository repository = context + .getBean(EntityWithoutAnnotationFixedRepository.class); + + assertThat(repository).isNotNull(); + } + + @Test + void givenEntityWithJakartaAnnotationApplication_whenBootstrap_thenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(EntityWithJakartaAnnotationApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenWrongEntityScanApplication_whenBootstrap_thenExpectedExceptionThrown() { + Exception exception = assertThrows(Exception.class, + () -> run(WrongEntityScanApplication.class)); + + assertThat(exception) + .getRootCause() + .hasMessageContaining("Not a managed type"); + } + + @Test + void givenWrongEntityScanApplicationFixed_whenBootstrap_thenRepositoryBeanShouldBePresentInContext() { + ConfigurableApplicationContext context = run(WrongEntityScanFixedApplication.class); + CorrectEntityRepository repository = context + .getBean(CorrectEntityRepository.class); + + assertThat(repository).isNotNull(); + } +}