我正在从 Spring boot 2.7 迁移到 Spring boot 3.0,我发现了一个
error: cannot access MappedSuperclass
,我怀疑它来自 JPA,我已经更改了 jakarta 的依赖项和所有 javax,但我仍然遇到以下错误,我在 IDE 中没有显示任何错误,只是在运行时收到日志。
这是错误,我只是分享一部分,因为我不太大,但都遵循相同的结构,只是功能不同。
> Task :compileJava FAILED
warning: unknown enum constant GenerationType.IDENTITY
reason: class file for javax.persistence.GenerationType not found
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant FetchType.LAZY
reason: class file for javax.persistence.FetchType not found
warning: unknown enum constant CascadeType.ALL
reason: class file for javax.persistence.CascadeType not found
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant FetchType.LAZY
warning: unknown enum constant CascadeType.ALL
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant GenerationType.IDENTITY
error: cannot access MappedSuperclass
class file for javax.persistence.MappedSuperclass not found
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:24: error: cannot find symbol
payload.setCosAttachmentId(disputeAttachment.getAttachmentObjectStorageId());
^
symbol: method setCosAttachmentId(String)
location: variable payload of type AddAttachmentPayload
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:25: error: cannot find symbol
unknown enum constant GenerationType.IDENTITY
payload.setEsAttachmentRefId(disputeAttachmentEventData.getEsAttachmentRefId());
^
symbol: method setEsAttachmentRefId(String)
location: variable payload of type AddAttachmentPayload
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:26: error: cannot find symbol
payload.setFileName(disputeAttachment.getFileName());
unknown enum constant FetchType.LAZY
^
symbol: method setFileName(String)
unknown enum constant CascadeType.ALL
location: variable payload of type AddAttachmentPayload
unknown enum constant GenerationType.IDENTITY
unknown enum constant FetchType.LAZY
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:27: error: cannot find symbol
unknown enum constant CascadeType.ALL
unknown enum constant GenerationType.IDENTITY
payload.setFederalFlag(disputeAttachmentEventData.getFederalFlag());
^
cannot access MappedSuperclass
symbol: method setFederalFlag(String)
location: variable payload of type AddAttachmentPayload
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:28: error: cannot find symbol
payload.setTenantId(tenantId);
^
symbol: method setTenantId(String)
location: variable payload of type AddAttachmentPayload
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:29: error: cannot find symbol
payload.setCreatedBy(entitlement.getData().getEmail());
^
symbol: method setCreatedBy(String)
location: variable payload of type AddAttachmentPayload
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/AttachmentPayloadConverter.java:36: error: cannot find symbol
String createdByMail = user.getContent().getMail()[0];
^
symbol: method getContent()
location: variable user of type BluepagesResponse
我收到错误的所有类都具有相同的结构,所以我只展示一个示例
import jakarta.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class AddAttachmentPayload {
private String cosAttachmentId;
private String esAttachmentRefId;
private String fileName;
private String createdBy;
private String federalFlag;
private String tenantId;
}
这是我在 build.gradle 的依赖项
dependencies {
// Spring dependencies
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-validation')
implementation('org.springframework.boot:spring-boot-starter-security')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-actuator')
implementation('org.springframework.boot:spring-boot-starter-data-redis')
annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa")
// Querydsl
//implementation group: 'com.querydsl', name: 'querydsl-jpa', version: querydslVersion
implementation("com.querydsl:querydsl-jpa:${querydslVersion}:jakarta")
implementation group: 'com.querydsl', name: 'querydsl-sql', version: querydslVersion
implementation group: 'com.querydsl', name: 'querydsl-sql-spring', version: querydslVersion
implementation group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
implementation group: 'com.querydsl', name: 'querydsl-core', version: querydslVersion
annotationProcessor("com.querydsl:querydsl-apt:${querydslVersion}:jakarta")
annotationProcessor("jakarta.persistence:jakarta.persistence-api:3.1.0")
}
我也遇到过这个错误,由于这个导入(MappedSuperClass),lombok 的注释处理器中断,因此 getter 和 setter 出现错误。只需在导入 MappedSuperClass 而不是 jakarta 时使用 javax,这些错误就会消失。您可以使用 jakarta 进行其他进口,但以下情况除外:
javax.sql.
javax.net.
javax.xml.
而且它们工作得很好。
您可以通过在 pom 中包含以下内容来使用 MappedSuperClass 的 javax import:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>