【问题标题】:Spring Boot Data - Getting 'Not a managed Type' error when the package is not included in default entityManagerSpring Boot Data - 当包不包含在默认 entityManager 中时出现“非托管类型”错误
【发布时间】:2017-05-17 11:08:58
【问题描述】:

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

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

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

找不到原因当包包含在第二个实体管理器工厂的包中时

我为这两个配置提供了完整的 sn-p。

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


}

【问题讨论】:

    标签: spring-boot spring-data spring-data-jpa spring-java-config


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我发现根包中还有另一个类(相同的实体)——这在基于 web 的非 spring-boot 中运行良好。我删除了副本,它开始正常工作。这两者之间没有任何关系。我不明白为什么它不起作用,但您的回答帮助我进行了重构。
    猜你喜欢
    • 2012-11-05
    • 2018-09-21
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2014-11-17
    • 2022-01-20
    相关资源
    最近更新 更多