2017-02-07 6 views
1

с помощью загрузки Spring 1.4.3.and зимуют 5.0.11 со следующей конфигурацией для Spring JPA данных я получаю SQL Error: -5501, SQLState: 42501 пользователь не имеет привилегий или объект не найден : ROLE
Что случилось с моей конфигурацией?ошибка конфигурации Spring загрузки JPA

pom.xml экстракт:

<dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.zaxxer</groupId> 
      <artifactId>HikariCP</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
</dependencies>  

application.properties:

spring.datasource.hikari.jdbc-url=jdbc:hsqldb:mem:test 
spring.datasource.hikari.username=sa 
spring.datasource.hikari.password= 
spring.jpa.hibernate.ddl-auto=create 
spring.jpa.show-sql=true 

ConfigForJpa:

@Configuration 
@EnableAutoConfiguration 
@EntityScan(basePackages = {"io.boot.spring.entities"}) 
@EnableJpaRepositories(basePackages = {"io.boot.spring.repositories"}) 
@EnableTransactionManagement 
public class ConfigForJPA { 

@Bean 
public LocalContainerEntityManagerFactoryBean 
entityManagerFactory(EntityManagerFactoryBuilder builder) { 
    return builder 
      .dataSource(dataSource()) 
      .packages("io.boot.spring") 
      .persistenceUnit("io.boot.springs.entities") 
      .build(); 
} 
@Bean 
@ConfigurationProperties("spring.datasource.hikari") 
public HikariDataSource dataSource() { 
    return (HikariDataSource) DataSourceBuilder.create() 
      .type(HikariDataSource.class).build(); 
} 

}

Услуги:

@Service общественного класса InitDBService {

@Autowired 
private RoleRepository roleRepository; 

@PostConstruct 
public void init(){ 
    Role roleUser = new Role(); 
    roleUser.setName("ROLE_USER"); 
    roleRepository.save(roleUser); 

}}

консоль:

main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'io.boot.springs.entities' 
main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ 
name: io.boot.springs.entities 
main] org.hibernate.Version     : HHH000412: Hibernate Core {5.0.11.Final} 
main] org.hibernate.cfg.Environment   : HHH000206: hibernate.properties not found 
main] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
main] com.zaxxer.hikari.HikariDataSource  : HikariPool-1 - Started. 
main] com.zaxxer.hikari.pool.PoolBase   : HikariPool-1 - Driver does not support get/set network timeout for connections. (feature not supported) 
main] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect 
main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'io.boot.springs.entities' 
Hibernate: insert into Role (id, name) values (default, ?) 
main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: -5501, SQLState: 42501 
main] o.h.engine.jdbc.spi.SqlExceptionHelper : user lacks privilege or object not found: ROLE 
main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initDBService': 
Invocation of init method failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; 
SQL [insert into Role (id, name) values (default, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement 
main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'io.boot.springs.entities' 

класс Роль:

package io.boot.spring.entities; 

import java.util.List; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 

@Entity 
public class Role { 

@Id 
@GeneratedValue 
private Integer id; 

private String name; 

@ManyToMany(mappedBy = "roles") 
private List<User> users; 

getters & setters... 

}

configForJpa2:

@Configuration 
@EnableAutoConfiguration 
@EntityScan(basePackages = {"io.boot.spring.entities"}) 
@EnableJpaRepositories(basePackages = {"io.boot.spring.repositories"}) 
@EnableTransactionManagement 
public class ConfigForJPA { 

@Bean 
@ConfigurationProperties("spring.datasource.hikari") 
public HikariDataSource dataSource() { 
    return (HikariDataSource) DataSourceBuilder.create() 
      .type(HikariDataSource.class).build(); 
} 

}

Console2:

main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 
main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ame: default 
main] org.hibernate.Version     : HHH000412: Hibernate Core {5.0.11.Final} 
main] org.hibernate.cfg.Environment   : HHH000206: hibernate.properties not found 
main] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
main] com.zaxxer.hikari.HikariDataSource  : HikariPool-1 - Started. 
main] com.zaxxer.hikari.pool.PoolBase   : HikariPool-1 - Driver does not support get/set network timeout for connections. 
main] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect 
main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
ibernate: alter table blog drop constraint FKpxk2jtysqn41oop7lvxcp6dqq 
main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table blog drop constraint 
main] org.hibernate.tool.hbm2ddl.SchemaExport : user lacks privilege or object not found: PUBLIC.BLOG 
ibernate: alter table item drop constraint FK60ndn1v2u4j38nfc5yahfkb7e 
main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table item drop constraint 
main] org.hibernate.tool.hbm2ddl.SchemaExport : user lacks privilege or object not found: PUBLIC.ITEM 
ibernate: alter table user_roles drop constraint FKj9553ass9uctjrmh0gkqsmv0d 
main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table user_roles drop constraint 
main] org.hibernate.tool.hbm2ddl.SchemaExport : user lacks privilege or object not found: PUBLIC.USER_ROLES 
ibernate: alter table user_roles drop constraint FK7ecyobaa59vxkxckg6t355l86 
main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table user_roles drop constraint 
main] org.hibernate.tool.hbm2ddl.SchemaExport : user lacks privilege or object not found: PUBLIC.USER_ROLES 
ibernate: drop table blog if exists 
ibernate: drop table item if exists 
ibernate: drop table role if exists 
ibernate: drop table user if exists 
ibernate: drop table user_roles if exists 
ibernate: create table blog (id (start with 1), name varchar(255), url varchar(255), user_id integer, primary key (id)) 
ibernate: create table item (id (start with 1), description varchar(255), link varchar(255), published_date timestamp, title varchar(255), blog_id integer, primary key (id)) 
ibernate: create table role (id (start with 1), name varchar(255), primary key (id)) 
ibernate: create table user (id (start with 1), email varchar(255), name varchar(255), password varchar(255), primary key (id)) 
+0

Id say init завершает работу перед созданием таблиц. Вы можете удалить PostConstruct и запустить его через. Затем попробуйте получить доступ к таблице ролей с консоли? Вы можете использовать insert.sql в каталоге ресурсов для настройки данных – farrellmr

+0

Является ли объект Role сопоставлен в спящем режиме? Вы можете опубликовать класс Role. –

+0

Я разместил класс ролей – elk

ответ

0

Это, кажется, ошибка, связанная SQL, а не JPA один. Хорошим подходом является вход в ваши rdbms с теми же учетными данными, которые используются для вашей строки подключения, и проверка того, можно ли запросить таблицу, соответствующую вашей сущности, с вашим текущим пользователем.

Вы можете использовать dbeaver для этого, так как он поддерживает hsqldb.

+0

ok но как я должен проверить, что пользователь «sa» обладает необходимыми привилегиями? – elk

+0

Предоставьте разрешения для «sa» и убедитесь, что вы вышли из строя «SHUTDOWN» – gkatzioura

+0

имя пользователя «sa» является пользователем по умолчанию в hsqlDB, который я использую как «в БД памяти» для тестирования, и у него есть все привилегии. когда я минимизировать configForJpa и пусть Hibernate сделать его магические таблицы созданы, но я получаю другую ошибку: гибернации: изменить табличные user_roles удалить ограничение я отправил консоль и configForJpa2 – elk