Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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
Java 冬眠4不';在Tomcat 7/8内部部署时,不能创建表_Java_Hibernate_Tomcat_Hbm2ddl - Fatal编程技术网

Java 冬眠4不';在Tomcat 7/8内部部署时,不能创建表

Java 冬眠4不';在Tomcat 7/8内部部署时,不能创建表,java,hibernate,tomcat,hbm2ddl,Java,Hibernate,Tomcat,Hbm2ddl,是的,这听起来很疯狂,但当我在Tomcat内部部署WAR时,“hibernate.hbm2ddl.auto”属性被忽略了。我有一个SpringMVC项目,我正在使用Maven构建一个WAR。在部署该WAR时,我可以从日志中看到,它只是没有按照预期创建/更新表 如果我运行一个集成测试(使用junit和Spring的模拟servlet),那么它就可以正常工作,或者如果我将同一个JAR部署到Jetty,那么它也可以正常工作。Hibernate对H2和MySQL的工作/失败方式类似 在Tomcat内部运

是的,这听起来很疯狂,但当我在Tomcat内部部署WAR时,“hibernate.hbm2ddl.auto”属性被忽略了。我有一个SpringMVC项目,我正在使用Maven构建一个WAR。在部署该WAR时,我可以从日志中看到,它只是没有按照预期创建/更新表

如果我运行一个集成测试(使用junit和Spring的模拟servlet),那么它就可以正常工作,或者如果我将同一个JAR部署到Jetty,那么它也可以正常工作。Hibernate对H2和MySQL的工作/失败方式类似

在Tomcat内部运行时,如果表已经存在,我的数据库可以很好地连接到数据库,查询也可以很好地工作,只是它们没有被创建/更新

我认为这可能是我的Tomcat7版本,所以我升级到了Tomcat8,但仍然不起作用。我在我的机器上试过,在弹性豆茎上试过

这不是一个大问题,但这是一个非常烦人的未解之谜,如果有人有任何想法,我将不胜感激

东西会根据环境进行配置,但要了解它的外观

休眠配置

@Configuration
public class PersistenceJPAConfig {
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, Environment environment) throws IOException {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource);
        entityManagerFactoryBean.setPackagesToScan("...removed...");
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);

        Resource resource = new ClassPathResource("hibernate.test.properties");
        Properties jpaProperties = new Properties();
        jpaProperties.load(resource.getInputStream());
        entityManagerFactoryBean.setJpaProperties(jpaProperties);

        return entityManagerFactoryBean;
    }

    @Bean
    public BoneCPDataSource dataSource(Environment environment) throws Exception {
        BoneCPConfig config = new BoneCPConfig("test");

        return new BoneCPDataSource(config);
    }
}
hibernate.test.properties

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.hbm2ddl.auto=update
bonecp config.xml

<named-config name="development">
    <property name="jdbcUrl">jdbc:mysql://localhost/musicdev</property>
    <property name="username">root</property>
    <property name="password"></property>
</named-config>

jdbc:mysql://localhost/musicdev
根

您是否尝试过在web.xml的根元素中将meta data complete属性设置为false?

我花了很长时间从我的项目中逐段、逐配置地删除代码,直到只剩下WebAppInitializer和PersistenceJPAConfig类。所以我想当时我不太可能在做什么。因此,我开始从pom.xml中删除未使用的maven依赖项,并最终解决了这个问题


出于某种原因,在我不知道的情况下,因为一个3级的依赖项包含了log4j:log4j:1.2.14,它停止了一切工作。我尽可能地进行了验证,将所有内容恢复到上次提交,并为该依赖项添加了一个。瞧,Hibernate的行为与创建/更新表的预期完全相同。如果有人知道在不发出任何警告的情况下这会对任何事情产生什么影响,以及应用程序容器会对其产生什么影响,我很乐意听到

我试着加上它,但似乎没有任何效果。由于我的应用程序仍在正常启动和运行(不包括不创建/更新表),我很确定它正在找到@WebApplicationInitializer,这正是该参数会影响的,对吗?