les identifiants pour cette classe doivent être atsortingbués manuellement avant d’appeler save ():

 Causé par: org.springframework.orm.hibernate3.HibernateSystemException: les identifiants de cette classe doivent être atsortingbués manuellement avant d'appeler save (): com.rfid.model.Role;  l'exception nestede est org.hibernate.id.IdentifierGenerationException: les identifiants de cette classe doivent être atsortingbués manuellement avant d'appeler 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 de plus
     Causé par: org.hibernate.id.IdentifierGenerationException: les identifiants de cette classe doivent être atsortingbués manuellement avant d'appeler 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 de plus
     WARN [21:14:21] (CommonsLoggingOutput.java:59): - --Erroring: message batchId [1] [exception 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 Ssortingng U_id; public Ssortingng U_pwd; public Ssortingng U_account; public Ssortingng U_mode; public Ssortingng U_status; public Ssortingng getU_pwd() { return U_pwd; } public void setU_pwd(Ssortingng u_pwd) { U_pwd = u_pwd; } public Ssortingng getU_account() { return U_account; } public void setU_account(Ssortingng u_account) { U_account = u_account; } public Ssortingng getU_id() { return U_id; } public void setU_id(Ssortingng u_id) { U_id = u_id; } public Ssortingng getU_mode() { return U_mode; } public void setU_mode(Ssortingng u_mode) { U_mode = u_mode; } public Ssortingng getU_status() { return U_status; } public void setU_status(Ssortingng u_status) { U_status = u_status; } } 

Votre classe @Entity a un type Ssortingng pour son champ @Id , elle ne peut donc pas générer d’identifiants pour vous.

Si vous le changez en un incrément automatique dans la firebase database et un Long en Java, et ajoutez l’annotation @GeneratedValue :

 @Id @Column(name="U_id") @GeneratedValue(strategy=GenerationType.IDENTITY) private Long U_id; 

Il gérera la génération incrémentielle d’ID pour vous.

Pour l’hibernation, il est important de savoir que votre object aura un identifiant lorsque vous souhaitez le conserver ou le conserver. Ainsi, assurez-vous que

  private Ssortingng U_id; 

aura une valeur, au moment où vous allez persister votre object. Vous pouvez le faire avec l’annotation @GeneratedValue ou en atsortingbuant une valeur manuellement.

Dans le cas où vous avez besoin ou souhaitez assigner votre identifiant manuellement (et c’est ce que fait l’erreur ci-dessus), je préférerais transmettre les valeurs des champs à votre constructeur, au moins pour U_id , par exemple

  public Role (Ssortingng U_id) { ... } 

Cela garantit que votre object a un identifiant, au moment où vous l’avez instancié. Je ne sais pas ce que votre cas d’utilisation est et comment votre application se comporte dans la concurrence, cependant, dans certains cas, ce n’est pas recommandé. Vous devez vous assurer que votre identifiant est unique.

Remarque supplémentaire: Hibernate aura toujours besoin d’un constructeur par défaut, comme indiqué dans la documentation Hibernate. Pour vous empêcher (et peut-être d’autres programmeurs si vous concevez une API) d’instanciations de Role utilisant le constructeur par défaut, déclarez-le simplement comme private .

Voici ce que j’ai fait pour résoudre de deux manières:

  1. rendre la colonne ID en tant que type int

  2. Si vous utilisez la génération automatique dans l’ID, n’assignez aucune valeur dans le setter d’ID. Si votre mappage de l’identité parfois parfois autogénérée n’est pas concédée. (Je ne sais pas pourquoi)

  3. essayez d’utiliser @GeneratedValue(strategy=GenerationType.SEQUENCE) si possible

Ce problème a été résolu à l’aide d’un ID de séquence défini dans la firebase database Oracle.

ORACLE_DB_SEQ_ID est défini comme une séquence pour la table. Consultez également la console pour voir le SQL Hibernate utilisé pour vérifier.

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