Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Can';t使用基于代码的配置初始化EntityManagerFactory_Spring Mvc_Entitymanager - Fatal编程技术网

Spring mvc Can';t使用基于代码的配置初始化EntityManagerFactory

Spring mvc Can';t使用基于代码的配置初始化EntityManagerFactory,spring-mvc,entitymanager,Spring Mvc,Entitymanager,我已经从XML配置转移到基于代码的配置。 这是我的JpaContext.java类: @Configuration @ComponentScan(basePackages = { "com.foo.bar.repository", "com.foo.bar.domain" }) @EnableJpaRepositories(basePackages={"com.foo.bar.repository"}) @EnableTransactionManagement(mode = AdviceMode

我已经从XML配置转移到基于代码的配置。 这是我的
JpaContext.java
类:

@Configuration
@ComponentScan(basePackages = { "com.foo.bar.repository", "com.foo.bar.domain" })
@EnableJpaRepositories(basePackages={"com.foo.bar.repository"})
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, order = 0)  // is like <tx:annotation-driven/>
@PropertySource( {"classpath:persistence.properties" } )

public class MyJpaContext {
    private static final Logger logger = LoggerFactory.getLogger(MyJpaContext.class);

    @Autowired
    Environment env;

    private @Value("${persistence.db.driverClass}") String driverClass;
    private @Value("${persistence.db.url}") String url;
    private @Value("${persistence.db.username}") String userName;
    private @Value("${persistence.db.password}") String passWord;

    @Bean
    public DataSource dataSource() {
        System.out.println(">>>>> Creating DataSource...");
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        logger.info(String.format("Using JDBC driver: %1$s", driverClass));
        logger.info(String.format("Using DB URL: %1$s", url));
        logger.info(String.format("Logging into DB with username: <%1$s> and password <%2$s>", userName, passWord));
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(env.getProperty("persistence.db.url"));
        dataSource.setUsername(userName);
        dataSource.setPassword(passWord);
        System.out.println("<<<<< DataSource successfully created.");
        return dataSource;
    }

    @Bean
    public HibernateJpaVendorAdapter jpaVendorAdapter() {
        System.out.println(">>>>> Creating HibernateJpaVendorAdapter...");
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql          (env.getProperty("persistence.hibernate.showSql", Boolean.class     ));
        adapter.setGenerateDdl      (env.getProperty("persistence.hibernate.generateDdl", Boolean.class ));
        adapter.setDatabasePlatform (env.getProperty("persistence.hibernate.databasePlatform"           ));
        System.out.println("<<<<< HibernateJpaVendorAdapter successfully created.");
        return adapter;
    }

    @Bean
    //  @DependsOn({"dataSource"})
    public EntityManagerFactory entityManagerFactory() {
        System.out.println("Creating EntityManagerFactory...");
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setPersistenceXmlLocation("classpath*:META-INF/persistence.xml");
        em.setDataSource(dataSource());
        em.setPackagesToScan("com.foo.bar.repository"); //this implicitly generates an appropriate persistence.xml for us at runtime . 
        em.setJpaVendorAdapter(jpaVendorAdapter());
        em.setJpaProperties(additionalProperties());
        em.setPersistenceUnitName("My_PU");
        em.setPersistenceProviderClass(org.hibernate.ejb.HibernatePersistence.class);
        em.afterPropertiesSet();
        System.out.println("<<<<< EntityManagerFactory successfully created.");
        return em.getObject();
    }

    Properties additionalProperties() {
        return new Properties() {
            {  // Hibernate Specific:
                setProperty("hibernate.hbm2ddl.auto", "update");
                setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
            }
        };
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        System.out.println("Creating JpaTransactionManager...");
        return new JpaTransactionManager(entityManagerFactory());
    }

//  @Bean
//  public PlatformTransactionManager txManager() {
//      System.out.println(env.getProperty("moka.session.timeout"));
//      return new DataSourceTransactionManager(dataSource());
//  }

    @Bean
        public PersistenceExceptionTranslator hibernateExceptionTranslator() {
        System.out.println(">>>>> Creating HibernateExceptionTranslator...");
        return new HibernateExceptionTranslator();
    }
}
当我启动TOMCAT时…虽然这个AbcTicket类确实存在

当Spring能够初始化我的Web应用程序时,我错过了什么


在从基于XML的配置转向基于代码的配置(逐个元素)之前,我能够启动我的web应用程序。

这似乎是一个重构问题。
我删除了所有与AbcClass的事件和关系,并重新创建了它们……现在它运行良好。

您正在扫描
com.foo.bar.repository
,而不是
com.foo.bar.domain
中包含
com.foo.bar.domain.AbcTicket
。您的意思是启用jparepositories注释在哪里?我也试着把com.foo.bar.domain放到那里,但没有成功。。。@ComponentScan包含AbcTicket所在的包。。。但是…AbcTicket是用实体注释的。这是扫描过的吗?
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: 
Factory method [public javax.persistence.EntityManagerFactory
com.foo.bar.config.MyJpaContext.entityManagerFactory()] threw exception; 
nested exception is 
java.lang.TypeNotPresentException: 
Type com.foo.bar.domain.AbcTicket not present