.HsqlException:用户缺少未找到的权限或对象

时间:2017-01-29 14:10:05

标签: java spring hibernate hsqldb

首先:我可能只是犯了一个愚蠢的错误。

我正在努力将我的旧项目从Spring XML转换为Javaconfig。该数据库是内存中的HSQLDB数据库。不幸的是,它给了我这个错误:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
(stacktrace)
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PUBLIC.T_AUTHORITY
(stacktrace)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PUBLIC.T_AUTHORITY

下面是我的PersistenceConfig.java和我的SQL脚本:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "org.jason.application.repository.jpa",
        entityManagerFactoryRef = "entityManagerFactoryBean")
public class ApplicationPersistenceConfig {

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {

        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(emf);
        return jpaTransactionManager;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean(DataSource dataSource) {

        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPersistenceUnitName("default");
        entityManagerFactory.setDataSource(dataSource);
        entityManagerFactory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        entityManagerFactory.setJpaDialect(new HibernateJpaDialect());
        entityManagerFactory.setPackagesToScan("org.jason.application.repository.model");

        entityManagerFactory.setJpaPropertyMap(hibernateJpaProperties());

        return entityManagerFactory;
    }

    @Bean
    public DataSource getDataSource() {

        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
        dataSource.setUrl("jdbc:hsqldb:mem:testdb");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }

    private Map<String, ?> hibernateJpaProperties() {

        HashMap<String, String> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.import_files", "insert-data.sql");
        properties.put("hibernate.hbm2ddl.auto", "create-drop");
        properties.put("hibernate.show_sql", "false");
        properties.put("hibernate.format_sql", "false");
        properties.put("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
        properties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
        properties.put("hibernate.c3p0.min_size", "2");
        properties.put("hibernate.c3p0.max_size", "5");
        properties.put("hibernate.c3p0.timeout", "300"); // 5mins

        return properties;
    }
}

  CREATE TABLE PUBLIC.T_USER (
    USERID  INTEGER NOT NULL PRIMARY KEY,
      USERNAME VARCHAR_IGNORECASE(50) NOT NULL,
      PASSWORD VARCHAR_IGNORECASE(50) NOT NULL,
      ENABLED BOOLEAN NOT NULL,
    CREATE UNIQUE INDEX IX_USERNAME ON T_USER(USERNAME);

  CREATE TABLE PUBLIC.T_AUTHORITY (
    AUTHORITYID INTEGER NOT NULL PRIMARY KEY,
    USERID INTEGER NOT NULL,
--      USERNAME VARCHAR_IGNORECASE(50) NOT NULL,
      AUTHORITY VARCHAR_IGNORECASE(50) NOT NULL,
      CONSTRAINT FK_AUTHORITIES_USERS FOREIGN KEY(USERID) REFERENCES USERS(USERID));
      CREATE UNIQUE INDEX IX_AUTH_USERNAME ON T_AUTHORITY (USERID,AUTHORITY);

INSERT INTO T_USER(USERNAME, PASSWORD, ENABLED) VALUES (1, 'jason','password', true);
INSERT INTO T_AUTHORITY(AUTHORITYID, USERID, AUTHORITY) VALUES (1, 1, "ROLE_ADMIN");

任何人都可以看到我犯的任何愚蠢的错误吗?

杰森

1 个答案:

答案 0 :(得分:1)

这是一个愚蠢的错误,就像我想的那样。

以下两个hibernate属性彼此不兼容:

    properties.put("hibernate.hbm2ddl.import_files", "insert-data.sql");
    properties.put("hibernate.hbm2ddl.auto", "create-drop");

两者都具有创建架构的效果。