猿问

创建名为“entityManagerFactory”的 bean 时出错,无法正常运行应用程序

我的SpringBoot应用程序无法正常运行。尝试更改依赖项、类路径、删除并在本地 .m2 中使用 hibernate 重新安装整个文件夹。我正在我的应用程序中制作 Spring boot 安全登录系统,在此之前,一切都很好。

更改依赖项、类路径、删除并重新安装本地 .m2 中的 hibernate 整个文件夹

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jdbc</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-thymeleaf</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>


        <!--SWAGGER  -->

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger2</artifactId>

            <version>2.9.2</version>

            <scope>compile</scope>

        </dependency>


        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger-ui</artifactId>

            <version>2.9.2</version>

            <scope>compile</scope>

        </dependency>


        <dependency>

            <groupId>org.hibernate.validator</groupId>

            <artifactId>hibernate-validator</artifactId>

            <version>6.0.16.Final</version>

        </dependency>


        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-entitymanager</artifactId>

            <version>5.4.4.Final</version>

        </dependency>


        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-core</artifactId>

            <version>5.4.4.Final</version>

        </dependency>


        <dependency>

            <groupId>org.hibernate.javax.persistence</groupId>

            <artifactId>hibernate-jpa-2.1-api</artifactId>

            <version>1.0.2.Final</version>

        </dependency>



精慕HU
浏览 127回答 3
3回答

喵喵时光机

问题在于您如何定义实体。超类和子类都有@Id属性。继承应该由IS-A HAS-A 关系来管理。因此,@Id子类中的 应该被排除,因为子类的实例应该可以被超类的对应实例识别@Id,这意味着子类必须具有@Id超类的属性(继承树)。此外,您的超类必须有一个@Id,因此快速解决方案是摆脱子@Id类中的 ,并在子类中添加相同的属性(不带@Id注释)。/* Class level annotations */public class Role { //Superclass    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "role_id")    private Integer roleId;}/* Class level annotations */public class UserApp  extends Role { //Subclass    private Integer roleId; // Same as the @Id in superclass}

蛊毒传说

确保您的 application.properties 文件具有正确的数据库 URL。还要检查实体名称是否正确。这是创建数据库连接时的常见错误。

MMMHUHU

您正在对 JPA 实体使用继承:UserApp 扩展 Role,但同时您声明 UserApp 应该拥有它自己的 @Id。这里的问题是您试图将域实体的继承映射到关系数据库。SQL 不直接支持这种关系,而 Hibernate 或任何其他 JPA 实现必须将其映射到支持的概念。您可以在 4 种策略中进行选择,将域模型的继承结构映射到不同的表结构:映射超类、每个类表、单表或连接表方法。这些策略都有其优点和缺点。您应该选择最适合您的用例的一种。同时,我使用您的配置和您提供的代码在我的计算机上重现了该问题,正如我所提到的,UserApp 类中用 @Id 注释的字段导致了问题。快速修复选项之一是删除 UserApp 中的此字段。因此,以下代码在我的机器上运行测试效果很好:@NoArgsConstructor@Data@Entity@Table(name = "user")public class UserApp extends Role {    private String name;    private String password;    private int active;    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)    @JoinTable(name = "user_role",            joinColumns =            @JoinColumn(name = "user_id"),            inverseJoinColumns = @JoinColumn(name = "role_id"))    private Set<Role> roles;    public UserApp(UserApp userApp) {    }}正如您在评论之一中提到的,此错误发生在默认测试中(不是您编写的) - 如果您只想构建,总是有一个选项可以跳过它:mvn clean install -DskipTests
随时随地看视频慕课网APP

相关分类

Java
我要回答