java - .Hsql异常 : user lacks privilege or object not found

标签 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");

谁能看到我犯了什么愚蠢的错误?

杰森

最佳答案

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

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

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

两者都有创建模式的作用。

关于java - .Hsql异常 : user lacks privilege or object not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921793/

相关文章:

java - Spring安全 session 创建

java - 静态最终变量在重建后具有旧值

java - 如何在多模块maven项目中单独运行多个模块

java - @cacheable 不适用于 Spring Boot。使用ehcache3

java - 在 Spring 中处理异常的最佳方法和实践?

java 将十六进制 NCR 文本转换为 unicode 字符

java - 为什么 Java 不使用现有的类语言规范语法来进行泛型类型规范?

spring - 社交验证 : Invalid Scopes: read_stream

java - 如何使用条件在 Hibernate 中实现选择和计数

java - 我可以将 Play 配置为使用 mysql 枚举而不是整数吗?