休眠错误:必须在调用 save() 之前手动分配此类的 ID: [英] Hibernate error: ids for this class must be manually assigned before calling save():
本文介绍了休眠错误:必须在调用 save() 之前手动分配此类的 ID:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的课是这样的:
@Entity@javax.persistence.Table(name="Role")@Table(appliesTo = "角色")公共类角色{@ID@Column(name="U_id")公共字符串 U_id;公共字符串 U_pwd;公共字符串 U_account;公共字符串 U_mode;公共字符串 U_status;公共字符串 getU_pwd() {返回 U_pwd;}公共无效setU_pwd(字符串u_pwd){u_pwd = u_pwd;}公共字符串 getU_account() {返回 U_account;}公共无效setU_account(字符串u_account){u_account = u_account;}公共字符串 getU_id() {返回 U_id;}公共无效setU_id(字符串u_id){u_id = u_id;}公共字符串 getU_mode() {返回 U_mode;}公共无效setU_mode(字符串u_mode){u_mode = u_mode;}公共字符串 getU_status() {返回 U_status;}公共无效setU_status(字符串u_status){u_status = u_status;}}
解决方案
你的 @Entity
类的 @Id
有一个 String
类型字段,因此它无法为您生成 ID.
如果你把它改成DB中的自动增量和java中的Long
,并添加@GeneratedValue
注解:
@Id@Column(name="U_id")@GeneratedValue(策略=GenerationType.IDENTITY)私人长 U_id;
它将为您处理递增的 id 生成.
Caused by: org.springframework.orm.hibernate3.HibernateSystemException: ids for this class must be manually assigned before calling save(): com.rfid.model.Role; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.rfid.model.Role at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676) at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424) at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:748) at com.wfos.engine.wrapper.domain.impl.WrapperImpl.save(WrapperImpl.java:159) ... 47 more Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.rfid.model.Role at org.hibernate.id.Assigned.generate(Assigned.java:53) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673) at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:751) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419) ... 50 more WARN [21:14:21] (CommonsLoggingOutput.java:59): - --Erroring: batchId[1] message[java.lang.reflect.UndeclaredThrowableException]
My class is like this:
@Entity
@javax.persistence.Table(name="Role")
@Table(appliesTo = "Role")
public class Role {
@Id
@Column(name="U_id")
public String U_id;
public String U_pwd;
public String U_account;
public String U_mode;
public String U_status;
public String getU_pwd() {
return U_pwd;
}
public void setU_pwd(String u_pwd) {
U_pwd = u_pwd;
}
public String getU_account() {
return U_account;
}
public void setU_account(String u_account) {
U_account = u_account;
}
public String getU_id() {
return U_id;
}
public void setU_id(String u_id) {
U_id = u_id;
}
public String getU_mode() {
return U_mode;
}
public void setU_mode(String u_mode) {
U_mode = u_mode;
}
public String getU_status() {
return U_status;
}
public void setU_status(String u_status) {
U_status = u_status;
}
}
解决方案
Your @Entity
class has a String
type for its @Id
field, so it can't generate ids for you.
If you change it to an auto increment in the DB and a Long
in java, and add the @GeneratedValue
annotation:
@Id
@Column(name="U_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long U_id;
it will handle incrementing id generation for you.
这篇关于休眠错误:必须在调用 save() 之前手动分配此类的 ID:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文