BAEL-6346 - "Not a managed type" exception in Spring Data JPA

This commit is contained in:
ICKostiantyn.Ivanov 2024-04-14 18:10:26 +02:00
parent 11084b012d
commit 60751b2a06
16 changed files with 190 additions and 1 deletions

View File

@ -14,6 +14,11 @@
</parent> </parent>
<dependencies> <dependencies>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>

View File

@ -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;
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class EntityWithJakartaAnnotationApplication {
}

View File

@ -0,0 +1,7 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithjakartaannotation;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EntityWithJakartaAnnotationRepository extends JpaRepository<EntityWithJakartaAnnotation, Long> {
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation;
import javax.persistence.Id;
public class EntityWithoutAnnotation {
@Id
private Long id;
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class EntityWithoutAnnotationApplication {
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotation;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EntityWithoutAnnotationRepository
extends JpaRepository<EntityWithoutAnnotation, Long> {
}

View File

@ -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;
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class EntityWithoutAnnotationFixedApplication {
}

View File

@ -0,0 +1,8 @@
package com.baeldung.spring.notamanagedtypeexceptioninspringdatajpa.entitywithoutannotationfixed;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EntityWithoutAnnotationFixedRepository
extends JpaRepository<EntityWithoutAnnotationFixed, Long> {
}

View File

@ -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 {
}

View File

@ -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;
}

View File

@ -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 {
}

View File

@ -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<CorrectEntity, Long> {
}

View File

@ -1,7 +1,7 @@
server.port=0
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa spring.datasource.username=sa
spring.datasource.password=sa spring.datasource.password=sa
spring.jpa.properties.hibernate.globally_quoted_identifiers=true spring.jpa.properties.hibernate.globally_quoted_identifiers=true
logging.level.com.baeldung.spring.data.persistence.search=debug logging.level.com.baeldung.spring.data.persistence.search=debug

View File

@ -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();
}
}