【问题标题】:Unable to access HSQLDB database in spring-boot application using Hibernate无法使用 Hibernate 在 spring-boot 应用程序中访问 HSQLDB 数据库
【发布时间】:2014-12-25 04:20:48
【问题描述】:

在我当前的 spring-boot 应用程序中,我正在尝试使用 hibernate 来访问 HSQLDB 数据库。我有这个用于休眠的配置类:

@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.spring.app" })
public class HibernateConfig {

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();

      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "com.spring.app.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      String db_url = System.getProperty("user.home")+File.separator+"testedb";

      dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
      dataSource.setUrl("jdbc:hsqldb:file:"+db_url);
      dataSource.setUsername("sa");
      dataSource.setPassword("");

      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", "create");
            setProperty("hibernate.hbm2ddl.import_files", "import.sql");
            setProperty("hibernate.show_sql", "false");
            setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
         }
      };
   }
}

但是当我运行应用程序时,当我应该导出数据库方案时,我会在控制台中看到这条消息:

2014-10-29 09:38:26.251  INFO 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
2014-10-29 09:38:26.261 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_members drop constraint FK_1r16pyyykpv1v6s973ahavdf8
2014-10-29 09:38:26.261 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : user lacks privilege or object not found: PUBLIC.ROLE_MEMBERS
2014-10-29 09:38:26.261 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_members drop constraint FK_r6a4sbd3nbgk795exs9p5s6sr
2014-10-29 09:38:26.261 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : user lacks privilege or object not found: PUBLIC.ROLE_MEMBERS
2014-10-29 09:38:26.262 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_permissions drop constraint FK_ipe67mj8dm7kxw2hcdxrixfaa
2014-10-29 09:38:26.262 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : user lacks privilege or object not found: PUBLIC.ROLE_PERMISSIONS
2014-10-29 09:38:26.262 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_permissions drop constraint FK_cpxi8h0vi43j90938fdt729p7
2014-10-29 09:38:26.263 ERROR 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : user lacks privilege or object not found: PUBLIC.ROLE_PERMISSIONS
2014-10-29 09:38:26.270  INFO 16405 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

我尝试同时使用saSA 作为用户名,但没有成功。另外,我的类路径中有这个import.sql 文件:

INSERT INTO role VALUES (1, 'admin');
INSERT INTO permission VALUES (1, 'admin');
INSERT INTO role_permissions VALUES (1,1);
INSERT INTO usuario VALUES (1, 'klebermo', 'pwd', 'Kleber', 'Mota', 'kleber@mail');
INSERT INTO role_members VALUES (1,1);

但没有在数据库中插入数据(当我尝试登录应用程序时,我收到一条消息“找不到用户”。

我在这里做错了什么?

【问题讨论】:

标签: spring hibernate spring-mvc hsqldb spring-boot


【解决方案1】:

我同意博胡斯拉夫的观点。如果有帮助,我只需在 application.properties 中添加以下内容即可配置对 MySQL 的访问:

#
## Database configuration
#
spring.datasource.url: jdbc:mysql://localhost:3306/spring
spring.datasource.username: spring
spring.datasource.password: spring
spring.datasource.driverClassName: com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto: update
spring.jpa.database: MYSQL
#spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
#spring.jpa.show-sql: true

【讨论】:

  • 我想知道是否有办法用 java 代码做到这一点,允许我保留程序多平台(使用类似:String db_url = System.getProperty("user.home")+File.separator+"testedb")作为数据库名称
  • 确实有,您可以使用以下语法在 application.yml(或 .properties)中使用系统属性:my.property: ${user.home}${file.separator}testedb
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2016-07-03
  • 2020-12-15
相关资源
最近更新 更多