当前位置: 首页 > 知识库问答 >
问题:

spring boot错误:spring表不存在

安轶
2023-03-14

当我试图在数据库中保存角色时,会出现“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

共有1个答案

羊舌富
2023-03-14

您肯定需要这个表,可以是自己创建的,也可以是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)的建议