Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Problème avec le PersistenceManager et la transaction durant la création d'un objet.
    Bonjour,

    Voici mon problème. J'ai un objet capteur pour lequel je crée des liens avec deux autres tables: système et famille de capteurs.
    La création de lien avec la table système par la création d'un systemSensorLink se passe à merveille avec le code suivant:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	public void create() {
    		PersistenceManager pm = PMF.getManager();
    		Transaction tx = pm.currentTransaction();
    		try {
    			tx.begin();
    			pm.makePersistent(this);
    			tx.commit();
    		} catch(Exception e) {
    		} finally {
    			if (tx.isActive()) {
    				tx.rollback(); // Error occurred so rollback the PM transaction
    			}
    		}
    		pm.close();
    	}


    J'utilise ensuite le même code pour la création d'un lien entre le capteur et la famille de capteurs mais cette fois-ci, la table n'est pas mise à jour. En effet, lors du débuggage, le programme passe directement de la ligne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pm.makePersistent(this);
    à la ligne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if (tx.isActive()) {
    sans effectuer le
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    tx.commit();
    . Avez-vous une idée du pourquoi de ce saut de ligne? Puis-je utiliser ce même code deux fois? Sinon, comment créer des objets dans deux tables différentes à la suite?
    Merci encore pour votre réponse.

  2. #2
    Membre du Club
    Informations complémentaires
    Bonjour,

    Voici quelques informatinos supplémentaires suite à mon déboggage de ce matin.
    Donc, il y a bien un erreur mais comme je ne la traite pas, elle ne risque pas de s'afficher!
    La Voici: "Insert of object failed ....: Field 'ID' does not have a default value."
    Il Y a un problème avec l'attribution de Ids sur la méthode:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     Object persistedPc = persistentObjectInternal(obj, null, null, -1, objectProvider.PC)


    Si je trouve d'où cela provient, je mettrai la réponse.
    Si vous soupçonnez le manque de mon code, n'hésitez pas à m'en faire part.

  3. #3
    Membre chevronné
    Salut,
    essaies d´afficher l´erreur , et de nous la poster entierement,
    la on pourra deceller quelque chose.

    Il dit que ton ID n´a pas de valeur par defaut?
    comment as-tu defini ton ID dans la base de données?
    ya t-il un trigger qui geres cela?

    Eric

  4. #4
    Membre du Club
    Réponse.
    Bonjour,

    Voici l'erreur que j'obtiens:

    NucleusDataStoreException:

    Insert of object "com.server.jdo.SensorFamilySensorLink@1a1f562" using statement "INSERT INTO `SENSORFAMILYSENSORLINK` (`SENSORFAMILYID`,`SENSORID`) VALUES (?,?)" failed : Field 'ID' doesn't have a default value

    Je déclare la clé primaire ainsi:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
    public class SensorFamilySensorLink {
     
     
    	/** The id. */
    	@PrimaryKey
    	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    	private long id;


    Je n'initialisa pas mon ID: peut-être cela provient-il de là? MAis je pense plutôt que j'ai oublié de coder quelque chose qui permet le fonctionnement normal de la stratégie de génération automatique d'iD de GWT.
    Pour l'instant, j'ai corrigé en calculant l'ID moi-même, étant donné qu'il s'agit juste d'un long à incrémenter mais je préfèrerais que ce soit automatique.
    Dans ma base de données (MySQL Workbench), l'ID est défini ainsi: bigint(20) Primary Key.
    Je vais essayer en initialisant l'ID pour voir si cela change quelque chose.
    Merci encore pour votre aide.

###raw>template_hook.ano_emploi###