spring-boot - 如何在springboot的h2数据库中自动生成一个id?
问题描述
这是实体类。
@Entity
@Table(name = "STUDENT")
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID",updatable = false, nullable = false)
private Long id;
@Column(name = "Name")
private String name;
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;
}
}
当我提供带有 id 和 name 的输入时,它工作正常并保存数据库但是当我保存一个没有 id 的学生对象时,我得到一个异常
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.cnx.demo.SpringBoot.model.Student
at org.hibernate.id.Assigned.generate(Assigned.java:33) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:115) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:710) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:696) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:368) ~[spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
at com.sun.proxy.$Proxy102.persist(Unknown Source) ~[na:na]
at sun
解决方案
推荐阅读
- r - 您如何在 tmap 中定位标题和图例?
- php - 为什么会话变量仅将最后一行数据发送到另一页
- sass - Nativescript 复合组件
- linux - 使用相同的目标和变量名调用 cmake target_link_libraries() 不会附加请求
- python - 生成器表达式如何在 python 内部工作?
- asp.net-core - Azure Devops UnitTest 未找到“.deps.json”文件
- sql - 更新 SQL 数据,但数据包含 ' 所以出现错误
- c# - 如何正确设置 ReadBarcodes
- javascript - 当我们调用 web api 函数时,javascript 是否会创建执行上下文?
- angularjs - 如何使用 AutoHotKey 成功填充角度输入字段?我可以设置该值,但会收到一条提示未输入任何内容的消息