我有一个简单的实体。我正在使用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,但事实并非如此。他们在编写实体后不会期望我立即进行查找,对吗?
答案 0 :(得分:15)
您尚未指定映射中数据库自动生成ID。添加
@GeneratedValue(strategy = GenerationType.IDENTITY)
到您的ID字段。没有它,JPA不知道它必须在插入后执行select语句才能从数据库中获取生成的ID。