Comment spécifier packagesToScan dans HibernateJpaAutoConfiguration?

j'utilise HibernateJpaAutoConfiguration directement dans un essai à L'Unité de ressort. Alors que Hibernate et EntityManager est configuré, aucune entité n'est scannée.

Exception

10:29:36.377 [main] INFO  o.s.b.f.a.AutowiredAnnotationBeanPostProcessor - JSR-330 javax.inject.Inject' annotation found and supported for autowiring
10:29:36.505 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae
10:29:36.638 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae
10:29:36.716 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae
10:29:36.818 [main] INFO  o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'default'
10:29:36.842 [main] INFO  o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
10:29:36.979 [main] INFO  org.hibernate.Version - HHH000412: Hibernate Core {4.3.6.Final}
10:29:36.980 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
10:29:36.982 [main] INFO  org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
10:29:37.234 [main] INFO  o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
10:29:37.599 [main] INFO  org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL9Dialect
10:29:37.608 [main] INFO  o.h.e.j.internal.LobCreatorBuilder - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
10:29:37.648 [main] INFO  o.h.h.i.a.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory
10:29:37.742 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000228: Running hbm2ddl schema update
10:29:37.742 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000102: Fetching database metadata
10:29:37.744 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema
10:29:37.745 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000232: Schema update complete

Ma solution est de créer mon propre LocalContainerEntityManagerFactoryBean comme suit:

    final LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setPersistenceUnitName("buzzPU"); // persistence.xml
    factoryBean.setDataSource(dataSource);
    factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
    factoryBean.setPersistenceXmlLocation("classpath*:META-INF/donotparsepersistence.xml");
    factoryBean.setPackagesToScan("org.soluvas.buzz.core.jpa");

Notez que je n'utilise pas META-INF/persistence.xml

23
demandé sur Ankur Singhal 2014-08-18 19:10:19

2 réponses

Depuis le Printemps de Démarrage de référence...

62.4 séparer les définitions @Entity de la configuration du ressort

La Botte de printemps tente de deviner l'emplacement de vos définitions d'entités@, en se basant sur la @EnableAutoConfiguration qu'elle trouve. Pour obtenir plus de contrôle, vous pouvez utiliser l'annotation @EntityScan, par exemple

@Configuration
@EnableAutoConfiguration
@EntityScan(basePackageClasses=City.class)
public class Application {
   //...
}
51
répondu Emerson Farrugia 2015-10-06 08:37:04

utiliser ce qui suit aide aussi:

@EntityScan("org.soluvas.buzz.core.jpa")

il s'agit d'un alias pour la propriété 'basePackages' qui configure une liste de paquets à scanner pour rechercher des entités annotées.

cette annotation fournit une alternative au réglage manuel LocalContainerEntityManagerFactorybean. setPackagesToScan (String...) et est particulièrement utile si vous souhaitez configurer entité de balayage en un moyen de type sûr, ou si votre entité locale Managerfactorybean est auto-configuré.

14
répondu wdonet 2015-11-22 07:48:49