所以,我決定用 Hibernate 和 JavaFX 做一個專案。我已經設計了 UI 并在我用 Maven 創建的專案中對其進行了測驗,使用名為“javafx-archetype-fxml”的原型,它作業得很好。現在我正在嘗試將 Hibernate 添加到這個專案來管理持久層。我在 Maven 中添加了依賴項,“hibernate-core”v.6.0.0 并繼續使用“@Entity”型別注釋映射模型類,但它們不被 VSCode 識別。也許我需要向 module-info.java 添加一個模塊?
無法識別@Entity 注釋。

這是我的 pom.xml 檔案:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Beta1</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>13</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>13</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>com.ignaciocassi.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
這是我的 module-info.java 檔案:
module com.ignaciocassi {
requires javafx.controls;
requires transitive javafx.graphics;
requires javafx.fxml;
requires java.sql;
opens controllers to javafx.fxml;
exports com.ignaciocassi;
}
我是 Maven 和模塊化專案的新手,我想學習。任何建議或幫助將不勝感激。
uj5u.com熱心網友回復:
對于將來和我有同樣問題的任何人,我建議閱讀理解 Java 9 模塊 - 它們是什么以及如何按照@jewelsea 的建議使用它們。
實際上為我解決了這個問題的是將“需要 jakarta.persistence”添加到 Module-info.java 中,它提供了 JPA 注釋。
uj5u.com熱心網友回復:
這個答案是從評論和答案中獲取一些額外的資訊,并添加一些更多的背景關系資訊。它是對self-answer 的補充,它已經指出:
實際上為我解決了這個問題的是將“需要 jakarta.persistence”添加到 Module-info.java 中,它提供了 JPA 注釋。
為什么需要jakarta.persistence允許@Entity訪問
該@Entity注釋是JPA,而不是冬眠(雖然Hibernate可以使用它)。Hibernate 6 依賴于 jakarta 3 提供@Entity定義,它從模塊中的jakarta.persistence包中獲取。jakarta.persistence
在檔案中添加requires jakarta.persistence子句module-info.java允許訪問該模塊匯出的型別(包括@Entity型別)。
請注意,如果您使用其他 JPA 功能(如標準),它們可以位于同一模塊中的不同包中。因此,即使您使用jakarta.persistence.criteria包中的注釋,只需要jakarta.persistence模塊就足夠了,因為該模塊還包含標準包。
Hibernate 的其余部分呢?
我在網上幾乎找不到關于使用 Hibernate 6 可能需要在 module-info.java 中放置什么的具體資訊。據我所知,當前的 Hibernate 6 檔案沒有提到它(我認為這是一個缺點在檔案中)。
請注意,Hibernate 經常與其他技術一起使用,特別是Spring Data JPA。如果您現在或將來正在考慮在您的應用程式中使用 Spring 技術(我建議您不要使用直接的休眠集成)。只有當Spring 6 和 SpringBoot 3發布時,Spring才會真正與 JPMS 模塊系統很好地集成。因此,盡管您可以讓當前的 Spring 應用程式與 JPMS 一起使用,但我建議改為以非模塊化方式部署您的應用程式(請參閱下面的資訊)并運行一些非模塊化庫,例如任何 Spring 庫(也許還有休眠核心)離開類路徑。
了解 JPMS 模塊
幫助理解模塊:請參閱了解 Java 9 模塊 - 它們是什么以及如何使用它們,這是對 Java 平臺模塊系統 (JPMS) 的基本介紹,如果需要,您可以從那里進行一些獨立的研究和學習以獲取更多資訊.
非模塊化 JavaFX 應用程式
另請注意,您可能能夠避免這些問題,但會使您的應用程式非模塊化(即不在module-info.java您的應用程式中提供檔案)。 核心 JDK 類和 JavaFX 本身應該在模塊路徑之外運行,但您的應用程式和它使用的其他依賴庫可以:
- 您的應用程式可以是模塊化的,并且可以脫離模塊路徑運行
- 通過
module-info.java在您的應用程式中包含一個檔案。
- 或者,您的應用程式可以是非模塊化的。
- 通過不包含
module-info.java檔案。
對于非模塊化應用程式,您的應用程式類和依賴庫可以從類路徑而不是模塊路徑中運行。
有關這方面的更多資訊,請參閱openjfx.io 入門指南,其中討論了用于常見 IDE 設定和創建可部署運行時映像的模塊化和非模塊化應用程式。
部署非模塊化應用程式的缺點是您失去了模塊化提供的一些好處(例如更嚴格的訪問控制)。但對于某些應用程式,這是一個合適的部署目標。
Maven 設定的其他潛在問題
我認為的依賴型別pom是錯誤的。可能不應該有任何型別。我認為該pom型別僅用于在 maven 專案檔案的dependencyManagement 部分中匯入物料清單。Baeldung spring maven bom 教程中討論了該pom型別的用法。我可能錯了,該型別可能還有其他用途,但提供的資訊是我目前的理解。pom
您正在使用 beta 休眠軟體,這可能沒問題,實際上可能與 JPMS 模塊一起作業得更好,但請注意這一點。
hibernate-core仍然可以在 中找到org.hibernate,但版本 6 已移至org.hibernate.orm,因此在舊組下可能找不到未來版本。
uj5u.com熱心網友回復:
嘗試添加 Spring 資料 JPA maven 依賴項,因為 @Entity 注釋需要 javax.persistence 包。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.5.5</version>
</dependency>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/316324.html
上一篇:使用start.spring.io初始化Spring應用程式
下一篇:如何在oneToMany關系中正確創建新子項以避免托管重繪和分離物體錯誤?【Spring PostgreSQL】
