我已经将一个Spring Boot应用程序迁移到Spring Boot 3并编译了一个本机映像。应用程序使用Spring Data REST公开了一个简单的实体(见下面的代码)。
在应用程序启动时,它报错没有检测到标识符属性而终止。
Caused by: org.hibernate.AnnotationException: Entity 'at.martinahrer.cd.model.Address' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)
因此,提供@Id注释id属性的基类的映射信息似乎丢失了。
将AbstractPersistable的代码复制到我的代码库中并重新构建本机映像后,应用程序就可以正常启动并工作了。
package at.martinahrer.cd.model;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.jpa.domain.AbstractPersistable;
import jakarta.persistence.Entity;
@Entity
@Getter
@Setter
public class Address extends AbstractPersistable<Long> {
private String line1;
private String line2;
private String zip;
private String city;
private String state;
private String country;
}
所以需要更多的配置吗?我根据start.spring.io向导的建议添加了hibernate插件。
尝试使用类似的内容替换ID:
@Id
@Override
public UUID getId() {
return super.getId();
}
事实上,这缺少了本机支持的反射配置。我报告了一个错误,他们发布到https://github.com/spring-projects/spring-data-jpa/issues/2735以及解决方案
如果您在spring框架中使用Javax/Jakarta导入ID,则会给出相同的错误。
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long departmentID;
private String deptartmentName;
private String deptartmentAdress;
private String departmentCode;
}