当我试图在数据库中保存角色时,会出现“springit.role表不存在”。
我没有在我的数据库中创建一个名为“role”的表,因为我正在学习的课程中的老师没有创建一个表。
在DatabaseLoader类方法中调用“AddUserSandRoles()”时显示的异常
那么,问题出在哪里呢?
role.java
@Entity
@RequiredArgsConstructor
@Getter
@Setter
@ToString
@NoArgsConstructor
public class Role {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
@ManyToMany( mappedBy = "roles")
private Collection<User> users;
}
user.java
@Entity
@RequiredArgsConstructor
@Getter
@Setter
@ToString
@NoArgsConstructor
public class User implements UserDetails {
@Id @GeneratedValue
private Long id;
@NonNull
@Size(min = 8, max = 20)
@Column(nullable = false, unique = true)
private String email;
@NonNull
@Column(length = 100)
private String password;
@NonNull
@Column(nullable = false)
private boolean enabled;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id")
)
private Set<Role> roles = new HashSet<>();
public void addRole(Role role) {
roles.add(role);
}
public void addRoles(Set<Role> roles) {
roles.forEach(this::addRole);
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());
}
@Override
public String getUsername() {
return email;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
DatabaseLoader.java
@Component
public class DatabaseLoader implements CommandLineRunner {
private LinkRepository linkRepository;
private CommentRepository commentRepository;
private RoleRepository roleRepository;
private UserRepository userRepository;
public DatabaseLoader(LinkRepository linkRepository, CommentRepository commentRepository, RoleRepository roleRepository, UserRepository userRepository) {
this.linkRepository = linkRepository;
this.commentRepository = commentRepository;
this.roleRepository = roleRepository;
this.userRepository = userRepository;
}
@Override
public void run(String... args) {
addUsersAndRoles();
Map<String,String> links = new HashMap<>();
links.put("Securing Spring Boot APIs and SPAs with OAuth 2.0","https://auth0.com/blog/securing-spring-boot-apis-and-spas-with-oauth2/?utm_source=reddit&utm_medium=sc&utm_campaign=springboot_spa_securing");
links.put("Easy way to detect Device in Java Web Application using Spring Mobile - Source code to download from GitHub","https://www.opencodez.com/java/device-detection-using-spring-mobile.htm");
links.put("Tutorial series about building microservices with SpringBoot (with Netflix OSS)","https://medium.com/@marcus.eisele/implementing-a-microservice-architecture-with-spring-boot-intro-cdb6ad16806c");
links.forEach((k,v) -> {
linkRepository.save(new Link(k,v));
// we will do something with comments later
});
long linkCount = linkRepository.count();
System.out.println("Number of links in the database: " + linkCount );
}
private void addUsersAndRoles() {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String secret = "{bcrypt}" + encoder.encode("password");
Role userRole = new Role("ROLE_USER");
roleRepository.save(userRole);
Role adminRole = new Role("ROLE_ADMIN");
roleRepository.save(adminRole);
User user = new User("user@gmail.com",secret,true);
user.addRole(userRole);
userRepository.save(user);
User admin = new User("admin@gmail.com",secret,true);
admin.addRole(adminRole);
userRepository.save(admin);
User master = new User("master@gmail.com",secret,true);
master.addRoles(new HashSet<>(Arrays.asList(userRole,adminRole)));
userRepository.save(master);
}
}
schema.sql
CREATE DATABASE IF NOT EXISTS `springit`;
USE `springit`;
DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`created_by` varchar(255) DEFAULT NULL,
`creation_date` datetime DEFAULT NULL,
`last_modified_by` varchar(255) DEFAULT NULL,
`last_modified_date` datetime DEFAULT NULL,
`body` varchar(255) DEFAULT NULL,
`link_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FKoutxw6g1ndh1t6282y0fwvami` (`link_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `link`;
CREATE TABLE `link` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`created_by` varchar(255) DEFAULT NULL,
`creation_date` datetime DEFAULT NULL,
`last_modified_by` varchar(255) DEFAULT NULL,
`last_modified_date` datetime DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
我是新来springboot的,所以请帮帮我。
例外情况:
null
您肯定需要这个表,可以是自己创建的,也可以是Hibernate创建的。
有一个配置,您可以使用JPA添加到spring boot应用程序中,以便自动生成数据库模式(或缺少的部分)。看看这里https://docs.spring.io/spring-boot/docs/1.1.0.m1/reference/html/howto-database-initialization.html
问题内容: 在配置hibernate.cfg.xml中,我添加 Hibernate并在运行应用程序时自动创建表。但是,我通过运行drop table sql从数据库中手动删除该表。然后再次运行hibernate应用程序。出现异常 引起原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表’test.person’不存在 解决该问
我编译我的项目与,并失败与。 “详细信息”命令: 获取jar文件通过在源项目中运行 这里是源代码项目 这是目标项目pom。xml
问题内容: 我正在使用JDBC和它的新功能。但我不断收到此运行时异常: 这是给定的代码 如何使此代码起作用?我只是JDBC的初学者。 对于上面的代码;PASS =“ passowrd”,USER =“ root” 我在通过此站点修复的端口上遇到了问题 非常感谢 问题答案: 请在mysql数据库中检查数据库名称“ kholofedb ”是否存在 我想你还没有创造 请检查一次(如果没有创建)及其相关表
问题内容: 我在使用PostgreSQL 9.3和使用qoutes创建的表时遇到了一个奇怪的问题。例如,如果我使用qoutes创建表: 该表已正确创建,在pgAdminIII的SQL窗格中查看该引号时,可以看到保留了引号。但是,当我查询数据库以查找所有可用表的列表时(使用下面的查询),我看到结果不包含表名的引号。 由于该表是用引号创建的,因此我无法直接使用上述查询返回的表名,因为该表名未加引号,并
Intellij版本:Community 2019.2.3 Maven:3.6.2 Spring:2.2.0 我正在尝试创建一个非常简单的Spring maven项目,其中包含两个子模块(一个独立,另一个依赖于独立)。 根模块-测试多模块独立模块-独立依赖模块-依赖 测试多模块pom。xml具有所有与Spring相关的声明和模块定义 独立poom。xml是最简单的。只有父maven声明 从属模块p
我试图使用Intellij Ultimate(Java 1.8,Maven 3.5.4,spring 2.0.4)与spring boot创建一个项目。这是我的第一个spring boot项目,所以我不确定我是否正确地使用了Maven。 我已经尝试了编辑pom文件并从这个链接添加依赖项(spring-boot-starter-data-jpa,spring-boot-starter-web)的建议