表缺少元素的默认值(Spring引导+hibernate)



我正在尝试Spring引导上的项目,从strat.Spring.io下载了.zip并添加了我以前的项目。

我得到"表缺少元素的默认值"。

我的githubhttps://github.com/anatoliy19/spring_boot_test.git

问题代码在这里:

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.hibernate.annotations.Table;
import org.springframework.data.annotation.Id;

@Data
@AllArgsConstructor
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "lastName")
private String lastName;
@Column(name = "age")
private int age;
public User() {
}
public User(String name, String lastName, int age) {
this.name = name;
this.lastName = lastName;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Id = " + id + "n" +
"Name = " + name + "n" +
"lastName = " + lastName + "n" +
"Age = " + age + "n";
}
}

您使用的是Spring Boot 3.0.0.M4,正如版本所示,它是一个里程碑版本,而不是即将推出的Spring Boot 3的最终版本。Spring Boot 3使用JakartaEE 9作为基线,同时也对包进行了更改。因此,使用jakarta.persistence包进行注释是正确的。

但是,您使用的@Table来自org.hibernate.annotations,您需要jakarta.persistence.Table

这或多或少也适用于@Id,您当前使用的是Spring Data,而不是JPA。您应该导入jakarta.persistence.Id

在您的示例回购中,不确定您是否更新了它,您需要删除JPA 2.1 API依赖项。最后,您的实体应该具有以下导入:

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;

对于其他人,将答案从评论添加到帖子中。

表的导入错误。

如果使用Springboot版本>=3

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table; //correct import for Table

如果使用Springboot版本<3

它应该来自javax.persistence.*

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

更新:感谢@M.Denium对JPA升级进行的更正。

对于使用Springboot version < 3的人,可以使用上面提到的导入。但对于使用Springboot version >= 3的人来说,它已被重命名为Jakarta

引用官方文件:https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0

整个Spring团队,以及我们社区中的许多贡献者现在正在为下一代春天做准备。我们计划将于2022年11月发布Spring Boot 3.0。下一次重大修订将基于Spring Framework 6.0,需要Java 17或在上面它也将是第一个使用Spring Boot的版本使用雅加达EE 9 API(Jakarta.*(,而不是EE 8(javax.*(。

https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6

有关升级的更多详细信息,请参阅博客。

因此,根据依赖项使用导入并检查正确性。

最新更新