J'utilise Spring boot + JPA et j'ai un problème lors du démarrage du service.
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.nervytech.dialer.domain.PhoneSettings
at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:177)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
Voici le fichier Application.java,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
J'utilise UCp pour le regroupement de connexions et la configuration DataSource est ci-dessous,
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
@EnableJpaRepositories(entityManagerFactoryRef = "dialerEntityManagerFactory", transactionManagerRef = "dialerTransactionManager", basePackages = { "com.nervy.dialer.spring.jpa.repository" })
public class ApplicationDataSource {
/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory
.getLogger(ApplicationDataSource.class);
/** The Constant TEST_SQL. */
private static final String TEST_SQL = "select 1 from dual";
/** The pooled data source. */
private PoolDataSource pooledDataSource;
Implémentation de UserDetailsService,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Implémentation de la couche de service,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
La classe référentiel,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Classe d'entité,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
Classe WebSecurityConfig,
@Configuration
@EnableWebMvcSecurity
@ComponentScan
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
/**
* Instantiates a new web security config.
*/
public WebSecurityConfig() {
super();
}
/**
* {@inheritDoc}
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login", "/logoffUser", "/sessionExpired", "/error", "/unauth", "/redirect", "*support*").permitAll()
.anyRequest().authenticated().and().rememberMe().and().httpBasic()
.and()
.csrf()
.disable().logout().deleteCookies("JSESSIONID").logoutSuccessUrl("/logoff").invalidateHttpSession(true);
}
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
}
Les packages sont les suivants,
Application
la classe est en -com.nervy.dialer
Datasource
la classe est en -com.nervy.dialer.common
- Les classes d'entité sont en -
com.nervy.dialer.domain
- Les classes de service sont en -
com.nervy.dialer.domain.service.impl
- Les contrôleurs sont en -
com.nervy.dialer.spring.controller
- Les classes de référentiel sont dans -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
est dans -com.nervy.dialer.spring.security
Merci
spring
spring-mvc
jpa
spring-boot
spring-data
user1578872
la source
la source
Réponses:
Je pense que remplacer
@ComponentScan
par@ComponentScan("com.nervy.dialer.domain")
fonctionnera.Éditer :
J'ai ajouté un exemple d'application pour montrer comment configurer une connexion de source de données groupée avec BoneCP.
L'application a la même structure que la vôtre. J'espère que cela vous aidera à résoudre vos problèmes de configuration
la source
Configurez l'emplacement des entités à l'aide de @EntityScan dans la classe de point d'entrée Spring Boot.
Mise à jour de septembre 2016 : Pour Spring Boot 1.4+:
utilisez à la
org.springframework.boot.autoconfigure.domain.EntityScan
place de
org.springframework.boot.orm.jpa.EntityScan
, car ... boot.orm.jpa.EntityScan est obsolète à partir de Spring Boot 1.4la source
Essayez d'ajouter tout ce qui suit, dans mon application, cela fonctionne bien avec tomcat
J'utilise Spring Boot, et lorsque j'utilise un tomcat intégré, cela fonctionnait bien,
@EntityScan("my.package.base.*")
mais lorsque j'ai essayé de déployer l'application sur un tomcat externe, j'ai eu unenot a managed type
erreur pour mon entité.la source
Dans mon cas, le problème était dû au fait que j'avais oublié d'annoter mes classes Entity avec une
@javax.persistence.Entity
annotation. Doh!la source
@Entity
annotation. J'ai mis en place un exemple de projet ici: github.com/mate0021/two_datasources.gitSi vous avez copié-collé la configuration de persistance d'un autre projet, vous devez définir manuellement le package dans EntityManagerFactory :
la source
Vous pouvez utiliser l' annotation @EntityScan et fournir votre package d'entités pour analyser toutes vos entités jpa. Vous pouvez utiliser cette annotation sur votre classe d'application de base où vous avez utilisé l'annotation @SpringBootApplication.
par exemple @EntityScan ("com.test.springboot.demo.entity")
la source
n'oubliez jamais d'ajouter @Entity sur la classe de domaine
la source
J'ai eu cette erreur parce que j'ai stupidement écrit
Une brève explication: on crée généralement une classe FooBarRepository pour gérer les objets FooBar (représentant souvent des données dans une table appelée quelque chose comme foo_bar.) Lors de l'extension de CrudRepository pour créer la classe de référentiel spécialisée, il faut spécifier le type qui est géré - dans ce cas, FooBar. Ce que j'ai tapé par erreur, cependant, était FooBarRepository plutôt que FooBar. FooBarRepository n'est pas le type (la classe) que j'essaie de gérer avec le FooBarRepository. Par conséquent, le compilateur émet cette erreur.
J'ai mis en évidence la faute de frappe en gras . Supprimez le mot en surbrillance Repository dans mon exemple et le code se compile.
la source
Mettez ceci dans votre
Application.java
dossierla source
Soit vous avez manqué @Entity sur la définition de classe, soit vous avez un chemin de scan de composant explicite et ce chemin ne contient pas votre classe
la source
J'utilise Spring Boot 2.0 et j'ai corrigé ce problème en remplaçant @ComponentScan par
@EntityScan
la source
J'ai eu le même problème, mais uniquement lors de l'exécution de cas de tests de démarrage à ressort nécessitant JPA. Le résultat final était que notre propre configuration de test jpa initialisait une EntityManagerFactory et définissait les packages à analyser. Cela remplacera évidemment les paramètres EntityScan si vous le définissez manuellement.
Important à noter: si vous êtes toujours coincé , vous devez définir un point de rupture dans la
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
sur lasetPackagesToScan()
méthode et jeter un oeil à où cela est appelé et quels paquets sont transmis.la source
J'ai eu un problème lors de la migration de Spring boot 1.3.x vers 1.5, je l'ai fait fonctionner après la mise à jour du package d'entité au bean EntityManagerFactory
Ce bean référencé dans la classe Application comme ci-dessous
la source
J'ai le même problème, dans la version Spring Boot v1.3.x ce que j'ai fait est de mettre à niveau Spring Boot vers la version 1.5.7.RELEASE. Puis le problème a disparu.
la source
J'ai eu ce problème car je n'ai pas mappé toutes les entités dans le fichier orm.xml
la source
Ci-dessous a travaillé pour moi.
}
la source
J'ai déplacé ma classe d'application vers le package parent comme:
Classe principale: com.job.application
Entité: com.job.application.entity
De cette façon, vous n'avez pas besoin d'ajouter @EntityScan
la source