Spring 引导数据 - 当包未包含在默认的 entityManager 中时出现 'Not a managed Type' 错误

Spring Boot Data - Getting 'Not a managed Type' error when the package is not included in default entityManager

我的应用程序有两个实体管理器(entityManagerFactory 和 entityManagerFactorySec)。默认值与包“com.abc.model”相关联,第二个与包“com.abc.uw.model”相关联。

我观察到,只有当我将第二个包也包含到默认的 Entitymanager 时,应用程序启动才正常。即使我从日志中看到存储库已创建,也会出现以下错误。

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 配置为

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

找不到为什么它不工作当包被包含在第二个entitymanager工厂的包中

我提供了两个配置的完整代码段。

配置 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);
}

}

配置 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);
    }


}

我 99% 确定您是在为第一个包引用存储库中第二个包中的实体。直接或可能通过实体的某些属性。