亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建名為“entityManagerFactory”的 bean 時出錯,無法正常運行應用程序

創建名為“entityManagerFactory”的 bean 時出錯,無法正常運行應用程序

精慕HU 2023-07-19 10:49:17
我的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>
查看完整描述

3 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

問題在于您如何定義實體。超類和子類都有@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

}


查看完整回答
反對 回復 2023-07-19
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

確保您的 application.properties 文件具有正確的數據庫 URL。還要檢查實體名稱是否正確。這是創建數據庫連接時的常見錯誤。



查看完整回答
反對 回復 2023-07-19
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您正在對 JPA 實體使用繼承:UserApp 擴展 Role,但同時您聲明 UserApp 應該擁有它自己的 @Id。這里的問題是您試圖將域實體的繼承映射到關系數據庫。SQL 不直接支持這種關系,而 Hibernate 或任何其他 JPA 實現必須將其映射到支持的概念。

您可以在 4 種策略中進行選擇,將域模型的繼承結構映射到不同的表結構:映射超類、每個類表、單表或連接表方法。這些策略都有其優點和缺點。您應該選擇最適合您的用例的一種。

同時,我使用您的配置和您提供的代碼在我的計算機上重現了該問題,正如我所提到的,UserApp 類中用 @Id 注釋的字段導致了問題??焖傩迯瓦x項之一是刪除 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


查看完整回答
反對 回復 2023-07-19
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號