为什么在从 spring-data-jpa 保存返回的实体中未设置 ID

2022-09-04 20:26:51

我有一个简单的实体。我使用的是spring-data-jpa版本1.2.0.RELEASE和eclipselink 2.4.1。

@Entity
@Table(name="platform")
public class Platform {

    @Id
    @Column(name="id", nullable=false, updatable=false, insertable=true)
    private Long id;
    // etc.
}

我想保存它。我的仓库看起来像

public interface PlatformRepository extends JpaRepository<Platform, Long> {

    Platform findByName( String name );
}

使用此方法,我的控制器非常简单

@RequestMapping(method=RequestMethod.POST, produces="application/json")
public Platform post( Platform platform ) {
    Platform result = platformDao.saveAndFlush(platform);
    return result;
}

该方法的响应是

{"platform":{"id":null,"name":"Test1"}}

从平台中选择 * 显示 Test1 的 ID 为 6。该表定义为:

create table platform(
id int not null auto_increment primary key,
name varchar(128) not null);

我希望在保存后设置ID,但事实并非如此。他们不希望我在编写实体后立即进行查找,对吧?


答案 1

您尚未在映射中指定 ID 是由数据库自动生成的。加

@GeneratedValue(strategy = GenerationType.IDENTITY)

添加到您的 ID 字段。没有它,JPA 不知道它必须在插入后执行 select 语句才能从数据库中获取生成的 ID。


答案 2

推荐