Persistence ejb3

seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009 - 14 juil. 2009 à 19:19
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 16 juil. 2009 à 09:47
Bonjour,

j'utilise la technologie ejb3 pour pour creer une application dont le role d'inserer des données dans une base de données (mysql)
j'ai crée une entity bean qui s'appelle Vol pour la table VOL:

package ejb;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
*
* @author Administrateur
*/
@Entity
@Table(name = "vol")
@NamedQueries({@NamedQuery(name "Vol.findAll", query "SELECT v FROM Vol v"), @NamedQuery(name = "Vol.findById", query = "SELECT v FROM Vol v WHERE v.id = :id"), @NamedQuery(name = "Vol.findByDepart", query = "SELECT v FROM Vol v WHERE v.depart = :depart"), @NamedQuery(name = "Vol.findByDestination", query = "SELECT v FROM Vol v WHERE v.destination = :destination"), @NamedQuery(name = "Vol.findByHeure", query = "SELECT v FROM Vol v WHERE v.heure = :heure"), @NamedQuery(name = "Vol.findByDatevol", query = "SELECT v FROM Vol v WHERE v.datevol = :datevol"), @NamedQuery(name = "Vol.findByCompagnie", query = "SELECT v FROM Vol v WHERE v.compagnie = :compagnie"), @NamedQuery(name = "Vol.findByNVol", query = "SELECT v FROM Vol v WHERE v.nVol = :nVol"), @NamedQuery(name = "Vol.findByCommentaire", query = "SELECT v FROM Vol v WHERE v.commentaire = :commentaire")})
public class Vol implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Short id;
@Column(name = "depart")
private String depart;
@Column(name = "destination")
private String destination;
@Column(name = "heure")
private String heure;
@Column(name = "datevol")
private String datevol;
@Column(name = "compagnie")
private String compagnie;
@Column(name = "n°vol")
private Integer nVol;
@Column(name = "commentaire")
private String commentaire;

public Vol() {
}

public Vol(Short id) {
this.id = id;
}

public Short getId() {
return id;
}

public void setId(Short id) {
this.id = id;
}

public String getDepart() {
return depart;
}

public void setDepart(String depart) {
this.depart = depart;
}

public String getDestination() {
return destination;
}

public void setDestination(String destination) {
this.destination = destination;
}

public String getHeure() {
return heure;
}

public void setHeure(String heure) {
this.heure = heure;
}

public String getDatevol() {
return datevol;
}

public void setDatevol(String datevol) {
this.datevol = datevol;
}

public String getCompagnie() {
return compagnie;
}

public void setCompagnie(String compagnie) {
this.compagnie = compagnie;
}

public Integer getNVol() {
return nVol;
}

public void setNVol(Integer nVol) {
this.nVol = nVol;
}

public String getCommentaire() {
return commentaire;
}

public void setCommentaire(String commentaire) {
this.commentaire = commentaire;
}

@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Vol)) {
return false;
}
Vol other = (Vol) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "ejb.Vol[id=" + id + "]";
}

}



puis j'ai créer un bean qui s'apelle facadeVol qui sert à realiser les actions de persistences voici le code :


package ejb;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;


@Stateless
public class VolFacade implements VolFacadeLocal {
@PersistenceContext
private static EntityManager em;

@EJB
public Vol vol;

public void create(Vol vol) {
em.getTransaction().begin();
em.persist(vol);
em.getTransaction().commit();
}

public void edit(Vol vol) {
em.getTransaction().begin();
em.merge(vol);
em.getTransaction().commit();
}

public void remove(Vol vol) {
em.getTransaction().begin();
em.remove(em.merge(vol));
em.getTransaction().commit();
}

public Vol find(Object id) {
return em.find(Vol.class, id);
}

public List<Vol> findAll() {
return em.createQuery("select object(o) from Vol as o").getResultList();
}


public static void main(String[] args){
Vol voll = new Vol();
voll.setDepart("dddddd");
voll.setDestination("fgfdd");
VolFacade vf =new VolFacade();
vf.create(voll);

}

}
mais le probleme il ya une erreur d'execution de cette classe : Exception in thread "main" java.lang.NullPointerException
au niveau de la methode create()
svp quelqu'un peut m'aider
merci d'avance
A voir également:

10 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 juil. 2009 à 19:24
Salut,

Il me semble (mais ca reste à confirmer) que MySQL ne gère pas les transactions selon le type de table utilisé (pour des raisons de performance, il me semble qu'il s'agit d'InnoDB ou de MyISAM, je ne sais plus de quel type de table).

Du coup, le .getTransaction() renvoie null : un petit point d'arrêt à la ligne qui lève le NullPointerException est tu aura ta réponse.
______________________________________
DarK Sidious
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
15 juil. 2009 à 18:03
j'ai pas compris ce que je doit faire exactement est ce que tu peux m'eclairir encore un peu !!
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
15 juil. 2009 à 18:24
lors de deploiment de projet voici l'erreur qui apparait :

JDO76614 : Exceptions SQL lors du déploiement :
JDO76609 : SQLException lors de l'exécution de l'instruction "CREATE TABLE vol (id SMALLINT AUTO_INCREMENT NOT NULL, heure VARCHAR(255), datevol VARCHAR(255), depart VARCHAR(255), compagnie VARCHAR(255), n°vol INTEGER, destination VARCHAR(255), commentaire VARCHAR(255), PRIMARY KEY (id))" : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '°vol INTEGER, destination VARCHAR(255), commentaire VARCHAR(255), PRIMARY KEY (i' at line 1

et voici le script avec lequel j'ai crée ma base :

CREATE TABLE Vol (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
depart VARCHAR (50),
destination VARCHAR (50),
heure varchar (50),
datevol varchar (50),
compagnie VARCHAR (25),
n°vol int (50),
commentaire VARCHAR(100),
PRIMARY KEY (id)
);

je vois pas ou se trouve l'erreur exactement
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 juil. 2009 à 18:31
Salut,

Comme te le dit l'erreur, il y a un caractère illégal dans ta requête (en l'occurence, le '°')
______________________________________
DarK Sidious
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
15 juil. 2009 à 19:12
j'ai corrigé l'erreur de deploiment de projet mais l'erreur de la classe FacadeVol persiste encore

run-main:
Exception in thread "main" java.lang.NullPointerException
        at ejb.VolFacade.create(VolFacade.java:23)
        at ejb.VolFacade.main(VolFacade.java:46)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)


je vois pas ou existe l'erreur exactement
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 juil. 2009 à 23:28
Salut,

Ma réponse de l'autre jour tient toujours : il me semble pas que MySQL gère les transactions pour certains type de tables...
______________________________________
DarK Sidious
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
15 juil. 2009 à 23:54
et si j'opte pour derby ca sera une bonne solution !!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 juil. 2009 à 08:18
Salut,

Derby ? Pourquoi changer de base de données ? Tu as fais le choix d'utiliser MySQL, alors il faut faire avec ses limites... Je ne connais pas Derby, je ne l'ai jamais utilisé, et peut-être que tu aura les mêmes problèmes, voir pire avec ce SGBD... Alors tu fera quoi ? Tu changeras encore de SGBD ?

En informatique, il faut faire des choix techniques (et donc bien étudier les divers SGBD disponibles en évaluant ce qu'ils sont capables de faire ou non, et non se ruer sur le premier SGBD que tu connais...), et s'en tenir à ce choix, sinon tu t'en sors pas !

Donc le mieux, c'est soit tu laisse tomber le système de transaction pour tes requêtes, soit tu te documente sur MySQL pour savoir quel type de table propose les transactions, et quel type de table ne les propose pas...
______________________________________
DarK Sidious
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
16 juil. 2009 à 09:44
Salut,

si tu veux des transactions avec Mysql, il faut que tes tables soient en Innodb. C'est juste un paramétrage, tu peux même changer le type après avoir créer tes tables en myIsam
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
16 juil. 2009 à 09:47
euh, sur quelle ligne as tu le NullPointerException ?
Questiion bête : Si tu exécutes ta méthode main, comment est injecté ton EntityManager ?
0
Rejoignez-nous