IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

JPA Java Discussion :

(EntityManager) Erreur lors du commit


Sujet :

JPA Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut (EntityManager) Erreur lors du commit
    Bonjour,
    J'ai un souci avec l'insertion et la lecture de donnée de ma base (postgresql).
    Pour l’insertion j'ai une erreur lors du commit() et pour la lecture c'est lors du em.find(). Les 2 erreurs sont différentes mais je pense, viennent du même problème qui se trouve sur la clé primaire.

    Voici l'entité de la table dans laquel je tente d'inserer :

    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
    16
    17
    18
    19
    20
    21
    @Entity
    @Cacheable(true)
    @Table(name = "game", schema="nintendo")
    @Multitenant(MultitenantType.TABLE_PER_TENANT)
    @TenantTableDiscriminator(type = TenantTableDiscriminatorType.SCHEMA, contextProperty = PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
     
     
    public class Game implements Serializable{
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@Column(name = "game_id", unique = true, nullable = false)
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	private int gameId;
     
    	@Column(name = "game_title", length = 256)
    	private String gameTitle;
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "game_released")
    	private Date gameReleased;
    Et voici comment je tente d'insérer :

    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
    16
    17
    18
    19
     
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("projet_nintendo");
    		EntityManager em = emf.createEntityManager();
    		EntityTransaction transac = em.getTransaction();
    		transac.begin();
     
    Game g = new Game();
    			g.setGameId(Conversion.stringEnInt(array.getJSONObject(ii).getString("fs_id")));
    			g.setGameTitle(array.getJSONObject(ii).getString("title"));
     
     
    			em.persist(g);
     
    			System.err.println(g.getGameTitle());
    			System.err.println(g.getGameId());
     
    		transac.commit();
    		em.close();
    		emf.close();
    La lecture de l'objet "g" avant le commit se fait bien, je retrouve bien les informations que j'y ai mis.
    Ça plante lors du "transac.commit()" et j'ai l'erreur suivante :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
    	at test.main(test.java:84)
    Caused by: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.exceptions.DescriptorException.nullPointerWhileGettingValueThruInstanceVariableAccessor(DescriptorException.java:1277)
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:88)
    	at org.eclipse.persistence.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:630)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.writeFromObjectIntoRow(AbstractDirectMapping.java:1283)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1566)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1554)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:451)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:301)
    	at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
    	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
    	at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1737)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:226)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:125)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4207)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1441)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1531)
    	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:277)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1169)
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:132)
    	... 1 more
    Caused by: java.lang.NullPointerException
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:76)
    	... 26 more
    Pour la lecture, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("projet_nintendo");
    		EntityManager em = emf.createEntityManager();
    		EntityTransaction transac = em.getTransaction();
    		transac.begin();
     
    		Game g = em.find(database.orm.Game.class, 125);
    		System.err.println(g.getGameTitle());
    		System.err.println(g.getGameId());
     
    		transac.commit();
    		em.close();
    		emf.close();
    Ca plante sur la ligne ou je fais le em.find() et j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main" java.lang.NullPointerException
    	at org.eclipse.persistence.internal.jpa.CMP3Policy.createPrimaryKeyFromId(CMP3Policy.java:224)
    	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.findInternal(EntityManagerImpl.java:797)
    	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:719)
    	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588)
    	at test.main(test.java:58)
    Donc à chaque fois il est question de la clé primaire. J'ai essayé, dans ma base de la mettre en serial pour l'incrémenter toute seule mais aussi de l'incrémenter moi même mais l'un ou l'autre ne change rien.

    Je pense que j'ai du oublié quelque chose dans la description de mon entité ou dans le persistence.xml mais je ne vois pas quoi.

    Je vous mets le persistence.xml en plus si vous voyez quelque chose :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    	<persistence-unit name="projet_nintendo">
    		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    		<class>database.orm.Utilisateur</class>
    		<class>database.orm.Game</class>
    		<class>database.orm.Currency</class>
    		<class>database.orm.Country</class>
    		<class>database.orm.Price</class>
    		<class>database.orm.Favoris</class>
     
    		<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    		<properties>
    			<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
    			<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5433/projet_nintendo" /> <!-- BD Mane -->
                <property name="javax.persistence.jdbc.user" value="postgres" /> <!-- DB User -->
    			<property name="javax.persistence.jdbc.password" value="monPassword" /> <!-- DB Password -->
     	 		<property name="eclipselink.logging.level" value="OFF"/>   
      			<property name="eclipselink.cache.shared.default" value="true"/>
    		 	<property name="eclipselink.multitenant.tenants-share-cache" value="true"/>
    			<property name="eclipselink.query-results-cache" value="true"/>
     
    		</properties>
    	</persistence-unit>
    </persistence>
    P.S, la connexion à la base se fait bien.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 183
    Points : 9 306
    Points
    9 306
    Billets dans le blog
    1
    Par défaut
    C'est un non sens de définir ta colonne gameId avec l'annotation @GeneratedValue(strategy=GenerationType.IDENTITY) et de vouloir lui affecter toi-même une valeur.
    Cette annotation sert justement à générer une valeur automatiquement (un incrémental).
    Donc, soit tu retires l'annotation, soit tu retires l'affectation
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Merci de ta réponse.

    Alors oui c'est un non sens, je sais bien. Je me suis juste un peu emmêlé avec mes exemples dans mon premier message.

    Normalement, je suis en incrémentation automatique, d’où le "@GeneratedValue(strategy=GenerationType.IDENTITY)".
    Comme ça ne marchait pas, j'ai affecté moi même l'id sans oublier d'enlever "@GeneratedValue(strategy=GenerationType.IDENTITY)". Mais ça ne marchait toujours pas.
    Bref, dans un cas comme dans l'autre le problème est le même et je ne l'ai toujours pas résolu !

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 183
    Points : 9 306
    Points
    9 306
    Billets dans le blog
    1
    Par défaut
    Peux-tu remettre l'annotation @GenreratedValue et changer le type de ta clé de int -> Integer ?
    J'imagine que ça doit lui poser problème, le type primitif ne pouvant être null comment peut-il déterminer qu'il doit générer une valeur...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Merci pour ton aide.
    Malheureusement, cette modif ne change rien.
    J'ai toujours la même erreur :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    [EL Warning]: 2019-04-22 20:30:42.224--UnitOfWork(762809053)--Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
    	at test.main(test.java:86)
    Caused by: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.exceptions.DescriptorException.nullPointerWhileGettingValueThruInstanceVariableAccessor(DescriptorException.java:1277)
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:88)
    	at org.eclipse.persistence.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:630)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.writeFromObjectIntoRow(AbstractDirectMapping.java:1283)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1566)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1554)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:451)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:301)
    	at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
    	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
    	at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1737)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:226)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:125)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4207)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1441)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1531)
    	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:277)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1169)
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:132)
    	... 1 more
    Caused by: java.lang.NullPointerException
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:76)
    	... 26 more

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    septembre 2007
    Messages
    8 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : septembre 2007
    Messages : 8 355
    Points : 14 968
    Points
    14 968
    Par défaut
    Bonjour,

    Tu est sûr que la colonne game_id est auto incrémenté dans la base?

    A+.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Oui, quand je fais un insert directement dans DBeaver, c'est bien auto incrémenté !

    Pour tester, j'ai supprimé entièrement mon schéma, je l'ai recréé uniquement avec une table toute simple :
    Nom de la table : game
    Colonnes : game_id (PK), game_title (varchar).

    Nom : par défaut 2019-04-25 à 19.27.59.png
Affichages : 85
Taille : 46,8 Ko
    Nom : par défaut 2019-04-25 à 19.28.12.png
Affichages : 77
Taille : 19,1 Ko

    J'ai refait entièrement mon entité :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    package database.orm;
     
    import org.eclipse.persistence.annotations.Multitenant;
    import org.eclipse.persistence.annotations.MultitenantType;
    import org.eclipse.persistence.annotations.TenantTableDiscriminator;
    import org.eclipse.persistence.annotations.TenantTableDiscriminatorType;
    import org.eclipse.persistence.config.PersistenceUnitProperties;
     
    import java.io.Serializable;
     
    import javax.persistence.Cacheable;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
     
     
    /**
     * The persistent class for the game database table.
     * 
     */
    @Entity
    @Cacheable(true)
    @Table(name = "game", schema="nintendo")
    @Multitenant(MultitenantType.TABLE_PER_TENANT)
    @TenantTableDiscriminator(type = TenantTableDiscriminatorType.SCHEMA, contextProperty = PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
     
     
    public class Game implements Serializable{
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@Column(name = "game_id", unique = true, nullable = false)
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	private Integer gameId;
     
    	@Column(name = "game_title", length = 1024)
    	private String gameTitle;
     
    	public Integer getGameId() {
    		return gameId;
    	}
     
    	public void setGameId(Integer gameId) {
    		this.gameId = gameId;
    	}
     
    	public String getGameTitle() {
    		return gameTitle;
    	}
     
    	public void setGameTitle(String gameTitle) {
    		this.gameTitle = gameTitle;
    	}
     
    }
    Je tente une insertion comme ceci :

    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
    16
    17
    18
    19
     
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("projet_nintendo");
    EntityManager em = emf.createEntityManager();
    EntityTransaction transac = em.getTransaction();
    transac.begin();	
     
    Game g = new Game();
     
    g.setGameTitle("Zelda");
     
    em.persist(g);
     
    System.err.println("test titre : " + g.getGameTitle());
    System.err.println("test id : " + g.getGameId());
     
     
    transac.commit();
    em.close();
    emf.close();
    Mais j'ai encore et toujours cette foutue erreur :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    [EL Info]: 2019-04-25 19:39:34.372--ServerSession(441001942)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
    [EL Info]: connection: 2019-04-25 19:39:34.424--ServerSession(441001942)--file:/Users/sebastien/eclipse-workspace/Nintendo/target/classes/_projet_nintendo login successful
    test titre : Zelda
    test id : null
    [EL Warning]: 2019-04-25 19:39:34.487--UnitOfWork(1601687801)--Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
    	at test.main(test.java:42)
    Caused by: Exception [EclipseLink-69] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: A NullPointerException was thrown while extracting a value from the instance variable [gameId] in the object [database.orm.Game].
    Internal Exception: java.lang.NullPointerException
    Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[gameId-->nintendo.game.game_id]
    Descriptor: RelationalDescriptor(database.orm.Game --> [DatabaseTable(nintendo.game)])
    	at org.eclipse.persistence.exceptions.DescriptorException.nullPointerWhileGettingValueThruInstanceVariableAccessor(DescriptorException.java:1277)
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:88)
    	at org.eclipse.persistence.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:630)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.writeFromObjectIntoRow(AbstractDirectMapping.java:1283)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1566)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1554)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:451)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
    	at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
    	at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:301)
    	at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
    	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
    	at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
    	at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1737)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:226)
    	at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:125)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4207)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1441)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1531)
    	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:277)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1169)
    	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:132)
    	... 1 more
    Caused by: java.lang.NullPointerException
    	at org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:76)
    	... 26 more

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 183
    Points : 9 306
    Points
    9 306
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas une colonne de type "identity" que tu as mais une colonne liée à une séquence. Du coup, ton mapping n'est pas bon, il ne faut pas mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    mais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="le nom sequence")
    ou alors, bien sûr, utiliser vraiment une colonne identity.
    En script sql, ça ressemblerait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE color (
        color_id INT GENERATED ALWAYS AS IDENTITY,
        color_name VARCHAR NOT NULL
    );
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2016, 17h43
  2. Réponses: 2
    Dernier message: 11/09/2010, 10h29
  3. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo