Spring引导Jpa配置错误
使用Spring boot 1.4.3.0和hibernate 5.0.11 使用以下Spring数据jpa配置 我发现SQL错误: -5501,SQLState:42501 用户缺少权限或找不到对象:角色Spring引导Jpa配置错误,spring,hibernate,spring-mvc,jpa,spring-boot,Spring,Hibernate,Spring Mvc,Jpa,Spring Boot,使用Spring boot 1.4.3.0和hibernate 5.0.11 使用以下Spring数据jpa配置 我发现SQL错误: -5501,SQLState:42501 用户缺少权限或找不到对象:角色 我的配置有什么问题 pom.xml摘录: <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
我的配置有什么问题 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>
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();
}
}
服务:
@服务
公共类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...
}
控制台2:
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))
这似乎是一个与sql相关的错误,而不是JPA错误。一个好方法是使用与连接字符串相同的凭据登录到rdbms,并检查是否可以使用当前用户查询与实体对应的表
您可以使用dbeaver来执行此操作,因为它支持hsqldb。这似乎是一个与sql相关的错误,而不是JPA错误。一个好方法是使用与连接字符串相同的凭据登录到rdbms,并检查是否可以使用当前用户查询与实体对应的表
您可以使用dbeaver来执行此操作,因为它支持hsqldb。o.k.但是我应该如何验证用户“sa”是否具有必要的权限?向“sa”授予权限,并确保您发出关机命令“shutdown”用户名“sa”是hsqldb中的默认用户,我将其用作“内存中的数据库”进行测试,并且它具有所有权限。当我最小化configForJpa并让hibernate执行它的魔术时,创建了另一个错误:hibernate:alter table user_roles drop constraint我发布了控制台并为我配置了ConfigForJPA2,同一组application.yml属性完全适用于不同的项目。好的。但是,我应该如何验证用户“sa”是否具有必要的权限?向“sa”授予权限,并确保您发出关闭命令“shutdown”用户名“sa”是hsqlDB中的默认用户,我将其用作测试的“内存中数据库”,并且它具有所有权限。当我最小化configForJpa并让hibernate执行它的魔术时,创建了另一个错误:hibernate:alter table user_roles drop constraint我发布了控制台和ConfigForJPA2,同一组application.yml属性完全适用于不同的项目。角色对象是否映射到hibernate中?您可以发布角色类。我发布了角色classId,表示在创建表之前init已完成。是否可以删除PostConstruct并运行它,然后尝试从控制台访问角色表?您可以在resources目录中使用insert.sql来设置需要验证的数据。您在application.properties中提供的用户是否具有在数据库中插入数据的权限。好的。但是我应该如何验证用户“sa”是否具有必要的权限?角色对象是否映射到hibernate中?您可以发布角色类。我发布了角色classId,表示在创建表之前init已完成。是否可以删除PostConstruct并运行它,然后尝试从控制台访问角色表?您可以在resources目录中使用insert.sql来设置需要验证的数据。您在application.properties中提供的用户是否具有在数据库中插入数据的权限。好的。但是,我应该如何验证用户“sa”是否具有必要的权限?
@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();
}
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))