2017-01-29 172 views
1

第一:我可能只是犯了一个愚蠢的错误。.HsqlException:用户缺少权限或找不到对象

我正在将我的旧项目从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"); 

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

杰森

回答

0

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

以下两个休眠性能是不相容的彼此:

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

两者都创建模式的效果。

相关问题