seeif
Messages postés22Date d'inscriptionjeudi 9 juillet 2009StatutMembreDernière intervention19 août 2009
-
14 juil. 2009 à 19:19
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 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:
/**
*
* @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 :
@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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
seeif
Messages postés22Date d'inscriptionjeudi 9 juillet 2009StatutMembreDernière intervention19 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 :
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 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