Auslöser: org.springframework.orm.hibernate3.HibernateSystemException: IDs für diese Klasse müssen vor dem Aufruf von save () manuell zugewiesen werden: com.rfid.model.Role; Verschachtelte Ausnahme ist org.hibernate.id.IdentifierGenerationException: IDs für diese Klasse müssen manuell zugewiesen werden, bevor save (): com.rfid.model.Role aufgerufen wird 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) unter com.wfos.engine.wrapper.domain.impl.WrapperImpl.save (WrapperImpl.java:159) ... 47 mehr Auslöser: org.hibernate.id.IdentifierGenerationException: IDs für diese Klasse müssen manuell zugewiesen werden, bevor save (): com.rfid.model.Role aufgerufen wird 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 mehr WARNUNG [21:14:21] (CommonsLoggingOutput.java:59): - --Erroring: batchId [1] message [java.lang.reflect.UndeclaredThrowableException]
Meine Klasse ist wie folgt:
@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;
}
}
java
hibernate
identifier
程序 猿
quelle
quelle
Long
in Java sein, es kann seinInteger
Für den Ruhezustand ist es wichtig zu wissen, dass Ihr Objekt eine ID hat, wenn Sie es beibehalten / speichern möchten. Stellen Sie also sicher, dass
private String U_id;
wird einen Wert haben, wenn Sie Ihr Objekt beibehalten. Das kannst du mit dem machen
@GeneratedValue
Anmerkung oder durch manuelles Zuweisen eines Werts .Für den Fall, dass Sie Ihre IDs manuell zuweisen müssen oder möchten (und darum geht es bei dem obigen Fehler tatsächlich), würde ich es vorziehen, die Werte für die Felder an Ihren Konstruktor zu übergeben, zumindest für
U_id
zpublic Role (String U_id) { ... }
Dadurch wird sichergestellt, dass Ihr Objekt zum Zeitpunkt der Instanziierung eine ID hat. Ich weiß nicht, was Ihr Anwendungsfall ist und wie sich Ihre Anwendung gleichzeitig verhält. In einigen Fällen wird dies jedoch nicht empfohlen. Sie müssen sicherstellen, dass Ihre ID eindeutig ist.
Weiterer Hinweis: Für den Ruhezustand ist weiterhin ein Standardkonstruktor erforderlich, wie in der Dokumentation zum Ruhezustand angegeben . Um zu verhindern, dass Sie (und möglicherweise andere Programmierer, wenn Sie eine API entwerfen) Instanziierungen für die
Role
Verwendung des Standardkonstruktors vornehmen, deklarieren Sie ihn einfach alsprivate
.quelle
Dieses Problem wurde mithilfe einer in der Oracle-Datenbank definierten Sequenz-ID behoben.
ORACLE_DB_SEQ_ID
ist als Sequenz für die Tabelle definiert. Sehen Sie sich auch die Konsole an, um das zur Überprüfung verwendete Hibernate SQL anzuzeigen.@Id @Column(name = "MY_ID", unique = true, nullable = false) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "id_Sequence") @SequenceGenerator(name = "id_Sequence", sequenceName = "ORACLE_DB_SEQ_ID") Long myId;
quelle
unique = true, nullable = false
war das notwendig, da das DB-Schema so war. Nur spezifizieren@Id
&@GeneratedValue
hat bei mir nicht funktioniert. Vielen Dank.Folgendes habe ich getan, um es auf zwei Arten zu lösen:
ID-Spalte als
int
Typ festlegenwenn Sie mit Autogenerate in ID nicht in dem Setter von ID assing Wert. Wenn Sie die einige dann manchmal autogenetated ID zuordnen, wird nicht eingeräumt. (Ich weiß nicht warum)
versuchen Sie es
@GeneratedValue(strategy=GenerationType.SEQUENCE)
wenn möglichquelle