【问题标题】:Hibernate aren't creating my tables in databaseHibernate 没有在数据库中创建我的表
【发布时间】:2014-06-05 00:28:19
【问题描述】:

在我的 Spring/Maven 项目的当前状态下,我有两个应该在我的 postgresql 数据库中创建的实体类。 Hibernate的配置类是这样的:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:database.properties" })
@ComponentScan({ "spring.webapp.persistence" })
public class HibernateConfig {

   @Autowired
   private Environment env;

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "spring.webapp.persistence.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassname"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
      HibernateTransactionManager txManager = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         /**
         * 
         */
        private static final long serialVersionUID = 1L;

        {
            setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
            setProperty("hibernate.globally_quoted_identifiers", "true");
         }
      };
   }
}

我的文件 database.properties 是:

jdbc.driverClassname=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/maven_test?charSet=LATIN1
jdbc.user=klebermo
jdbc.pass=123
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-drop

我通过 pom.xml 添加 postgresql jdbc 驱动程序,如下:

<dependency>
  <groupId>postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>9.1-901.jdbc3</version>
  <scope>compile</scope>
</dependency>

任何人都可以看到此设置有什么问题吗?因为当我运行应用程序时,数据库中没有创建任何表。

【问题讨论】:

标签: java spring hibernate postgresql maven


【解决方案1】:

hibernate.hbm2ddl.auto=update 改为 create-drop update 用于创建新表并更新旧表(如果有更改)

<dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>

【讨论】:

  • 是的,我使用更新进行测试(实际上这是我的第一次尝试),但也无法正常工作。
  • postgresqlpostgresql9.1-901-1.jdbc4 试试这个。跨度>
  • 我也试试这个。在此处查看控制台的输出:klebermota.eti.br/wp-content/tomcat.txt
  • 表名是什么?
【解决方案2】:

好的,我现在找到问题了。碰巧我在注释@ComponentScan 中有错误的路径。我修复了,现在表已正常创建。无论如何,谢谢你的建议。

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2013-05-14
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多