0

Meine Anwendung verfügt über zwei Entitätsmanager (entityManagerFactory und entityManagerFactorySec). Der Standard ist dem Paket 'com.abc.model' und der zweite dem Paket 'com.abc.uw.model' zugeordnet.Spring Boot Data - Fehler 'Kein verwalteter Typ' erhalten, wenn das Paket nicht im Standard-EntityManager enthalten ist

Was ich beobachtet habe ist, dass der Start der Anwendung ist nur in Ordnung, wenn ich das zweite Paket als auch die Standard-Entitymanager enthalten. Der folgende Fehler wird angezeigt, obwohl in den Protokollen angezeigt wird, dass das Repo erstellt wurde.

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dmUwRefRulesRsltRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.abc.uw.model.DmUwRefRulesRslt 

Java configs sind

EntityManagerFactory:

return builder.dataSource(dmDs).packages(new String[]{"com.abc.model"}).build(); 
//startup is fine only with the commented line below 
//return builder.dataSource(dmDs).packages(new String[]{"com.abc.model","com.abc.uw.model"}).build(); 

entityManagerFactorySec:

return builder.dataSource(dataSource).packages(new String[]{ 
      "com.abc.uw.model"}).persistenceUnit("alternate").build(); 

finden konnte nicht, warum es nicht funktioniert Wenn das Paket in den Paketen der zweiten Entitymanager-Fabrik enthalten ist

Ich stelle das komplette Snippet für beide Konfigurationen zur Verfügung.

Config 1:

@Configuration 
@PropertySource("classpath:application.yml") 
@EnableJpaRepositories (basePackages = "com.abc.pcs", entityManagerFactoryRef = "entityManagerFactory") 
public class PersistenceConfig { 

@Bean(name = "dmDs") 
@ConfigurationProperties(prefix = "dm.datasource") 
public FactoryBean dmJndiDataSource() { 
    return new JndiObjectFactoryBean(); 
} 

@Bean("entityBuilder") 
public EntityManagerFactoryBuilder entityManagerFactoryBuilder() { 
    HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); 
    return new EntityManagerFactoryBuilder(hibernateJpaVendorAdapter, 
      new HashMap<String, Object>(){{put("eclipselink.weaving", "false");}}, null); 
} 

/** 
* @param builder 
* @param dmDs 
* @return 
* @link https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html#howto-use-two-entity-managers 
*/ 
@Bean(name = "entityManagerFactory") 
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("dmDs") final DataSource dmDs) { 

    LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = builder.dataSource(dmDs).packages(new String[]{"com.abc.model"}).build(); 
    return localContainerEntityManagerFactoryBean; 
} 

@Bean("transactionManager") 
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") final EntityManagerFactory entityManagerFactory) { 
    return new JpaTransactionManager(entityManagerFactory); 
} 

} 

Config 2:

@Configuration 
@PropertySource("classpath:application.yml") 
@EnableJpaRepositories (basePackages = {"com.abc.clp.hnw","com.abc.uw"}, entityManagerFactoryRef = "entityManagerFactorySec") 
public class AltPersistenceConfig { 

    @Bean(name = "dsSecondary") 
    @ConfigurationProperties(prefix = "ds_secondary.datasource") 
    public FactoryBean dmEclipseLinkJndiDataSource() { 
     return new JndiObjectFactoryBean(); 
    } 
    @Bean(name="entityManagerFactorySec") 
    public LocalContainerEntityManagerFactoryBean entityManagerFactorySec(EntityManagerFactoryBuilder builder, @Qualifier("dsSecondary") final DataSource dataSource) { 

     LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = builder.dataSource(dataSource).packages(new String[]{ 
       "com.abc.uw.model"}).persistenceUnit("alternate").build(); 
     return localContainerEntityManagerFactoryBean; 

    } 

    @Bean("transactionManagerSec") 
    public PlatformTransactionManager transactionManagerEclipseLink(@Qualifier("entityManagerFactorySec") final EntityManagerFactory entityManagerFactory) { 

     return new JpaTransactionManager(entityManagerFactory); 
    } 


} 

Antwort

0

Ich bin 99% sicher, dass die eine oder andere Sie verweisen Einheiten aus dem zweiten Paket in der Repository für den ersten. Entweder direkt oder möglicherweise durch ein Attribut einer Entität.

+0

Danke. Ich habe herausgefunden, dass es im Root-Paket eine andere Klasse (dieselbe Entität) gibt - das funktioniert gut in webbasiertem, nicht Spring-Boot. Ich entfernte das Duplikat und es begann gut zu funktionieren. Es gab keine Beziehung zwischen diesen beiden. Ich habe nicht verstanden, warum es nicht funktioniert hat, aber deine Antwort hat mir geholfen, das Refactoring zu machen. – patb23

Verwandte Themen