90 votes

Erreur Hibernate : les identifiants de cette classe doivent être attribués manuellement avant d'appeler save() :

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\]

Ma classe est comme ça :

@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;
}

}

0voto

Eklas_Rh Points 1

Si vous voulez donner la valeur de l'id manuellement comme JSON ou autre, vous pouvez ajouter la notation @JsonProperty(" U_id ") avant votre variable U_id.

0voto

Shashi Kumar Points 1

A partir de l'interface utilisateur, vous devez passer l'ID (clé primaire). Ensuite, l'observateur que vous enregistrez ou mettez à jour. Si vous sauvegardez, utilisez la méthode save ou la méthode saveOrUpdate.

0voto

PAG_G Points 11

Changez la valeur du champ classe dans votre entity.hbm.xml en identité ou en séquence comme suit

<hibernate-mapping>
<class name="models.Manager" table="Managers">
    <id name="id">
        <generator class="identity"></generator>
    </id>
    <property name="name"></property>
    <property name="surname"></property>
    <property name="department"></property>
    <property name="project_id"></property>
</class>

et ajoutez si vous n'avez toujours pas ces codes pour votre identifiant d'entité :

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)

qui a fonctionné pour moi

0voto

J'ai obtenu la même erreur pour un scénario différent. Dans mon cas, la clé primaire de la table est une valeur VARCHAR, donc dans la classe d'entité (Entity1), l'ID est une valeur String, je ne peux pas la configurer en génération automatique. De plus, cette entité est liée à une autre entité (Entity2).

Lorsque je mets la valeur de l'entité 1 à vide lors de la mise à jour de l'entité 2 et que j'appelle la fonction save(), l'exception suivante se produit. La définition d'une chaîne vide pour l'identifiant ne fonctionne pas.

Entity2 e2 = new Entity2();

Entity1 e1 = new Entity1();
e1.setId("");
e2.setEntity1(e1);

session.update(e2);

Le fait de mettre null pour l'id ne fonctionne pas non plus.

Entity2 e2 = new Entity2();

Entity1 e1 = new Entity1();
e1.setId(null);
e2.setEntity1(e1);

session.update(e2);

De cette façon, c'est du travail.

Entity2 e2 = new Entity2();
e2.setEntity1(null);
session.update(e2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X