servlet>ejb>jpa clé composée

servlet>ejb>jpa clé composée - Java - Programmation

Marsh Posté le 15-11-2009 à 17:50:34    

Bonjour,
salu je suis débutant en programmation J2EE.j'ecrit une application de bibliotheque avec netbeans et SGBD ORACLE avec 3 tables: LECTEUR OUVRAGE et la table EMPRUNT.
description:
lecteur(id_lecteur String,nom String,prenom String,contact String)
ouvrage(id_ouvr String, titre String, auteur String)
emprunt(id_ouvr,id_lecteur,deb Date,fin Date, eff Date)
 
Avec l'outil netbeans toutes les classe entités ont été générées automatiquement.
 
//classe EmpruntPK
 
public class EmpruntPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "ID_LECTEUR", nullable = false, length = 12)
    private String idLecteur;
    @Basic(optional = false)
    @Column(name = "ID_OUVR", nullable = false, length = 12)
    private String idOuvr;
 
    public EmpruntPK() {
    }
 
    public EmpruntPK(String idLecteur, String idOuvr) {
        this.idLecteur = idLecteur;
        this.idOuvr = idOuvr;
    }
 
    public String getIdLecteur() {
        return idLecteur;
    }
 
    public void setIdLecteur(String idLecteur) {
        this.idLecteur = idLecteur;
    }
 
    public String getIdOuvr() {
        return idOuvr;
    }
 
    public void setIdOuvr(String idOuvr) {
        this.idOuvr = idOuvr;
    }
 
//classe Emprunt
 
@Entity
@Table(name = "EMPRUNT", catalog = "", schema = "YAPO" )
@NamedQueries({@NamedQuery(name = "Emprunt.findAll", query = "SELECT e FROM Emprunt e" ), @NamedQuery(name = "Emprunt.findByIdLecteur", query = "SELECT e FROM Emprunt e WHERE e.empruntPK.idLecteur = :idLecteur" ), @NamedQuery(name = "Emprunt.findByIdOuvr", query = "SELECT e FROM Emprunt e WHERE e.empruntPK.idOuvr = :idOuvr" ), @NamedQuery(name = "Emprunt.findByDateDeb", query = "SELECT e FROM Emprunt e WHERE e.dateDeb = :dateDeb" ), @NamedQuery(name = "Emprunt.findByDateFin", query = "SELECT e FROM Emprunt e WHERE e.dateFin = :dateFin" ), @NamedQuery(name = "Emprunt.findByDateEff", query = "SELECT e FROM Emprunt e WHERE e.dateEff = :dateEff" )})
public class Emprunt implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected EmpruntPK empruntPK;
    @Column(name = "DATE_DEB" )
    @Temporal(TemporalType.DATE)
    private Date dateDeb;
    @Column(name = "DATE_FIN" )
    @Temporal(TemporalType.DATE)
    private Date dateFin;
    @Column(name = "DATE_EFF" )
    @Temporal(TemporalType.DATE)
    private Date dateEff;
    @JoinColumn(name = "ID_LECTEUR", referencedColumnName = "ID_LECTEUR", nullable = false, insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Lecteur lecteur;
    @JoinColumn(name = "ID_OUVR", referencedColumnName = "ID_OUVR", nullable = false, insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Ouvrage ouvrage;
 
    public Emprunt() {
    }
 
 
    public Emprunt(EmpruntPK empruntPK) {
        this.empruntPK = empruntPK;
    }
 
    public Emprunt(String idLecteur, String idOuvr) {
        this.empruntPK = new EmpruntPK(idLecteur, idOuvr);
    }
 
    public EmpruntPK getEmpruntPK() {
        return empruntPK;
    }
 
    public void setEmpruntPK(EmpruntPK empruntPK) {
        this.empruntPK = empruntPK;
    }
 
    public Date getDateDeb() {
        return dateDeb;
    }
 
    public void setDateDeb(Date dateDeb) {
        this.dateDeb = dateDeb;
    }
 
    public Date getDateFin() {
        return dateFin;
    }
 
    public void setDateFin(Date dateFin) {
        this.dateFin = dateFin;
    }
 
    public Date getDateEff() {
        return dateEff;
    }
 
    public void setDateEff(Date dateEff) {
        this.dateEff = dateEff;
    }
 
    public Lecteur getLecteur() {
        return lecteur;
    }
 
    public void setLecteur(Lecteur lecteur) {
        this.lecteur = lecteur;
    }
 
    public Ouvrage getOuvrage() {
        return ouvrage;
    }
 
    public void setOuvrage(Ouvrage ouvrage) {
        this.ouvrage = ouvrage;
    }
 
j'ai écris l'intarface EmpruntFacadeLocal suivant
 
// interface EmpruntFacadeLocal
 
@Local
public interface EmpruntFacadeLocal {
 void create(Emprunt ouvrage);
 
    void edit(Emprunt ouvrage);
 
    void remove(Emprunt ouvrage);
 
    Emprunt find(Object id);
 
    Collection<Emprunt> findAll();
 
void enregistrerEmprunt(String id_ouvr,String id_lecteur, Date deb,Date fin,Date eff);
}
 
j'ai écrit EmpruntFacadeBean suivant
// EmpruntFacadeBean
@Stateless
public class EmpruntFacadeBean implements EmpruntFacadeRemote, EmpruntFacadeLocal {
  @PersistenceContext
    private EntityManager em;
    private EmpruntPK epk;
    public void create(Emprunt emprunt) {
        em.persist(emprunt);
    }
 
    public void edit(Emprunt emprunt) {
        em.merge(emprunt);
    }
 
    public void remove(Emprunt emprunt) {
        em.remove(em.merge(emprunt));
    }
 
    public Emprunt find(Object id) {
        return em.find(entity.classes.Emprunt.class, id);
    }
 
    public Collection<Emprunt> findAll() {
        return em.createQuery("select object(o) from Emprunt as o" ).getResultList();
    }
    public void enregistrerEmprunt(String id_ouvr,String id_lecteur, Date deb,Date fin,Date eff) {
 
    <gras>if(em.find(Emprunt.class,???????????????)==null)
        {
            Emprunt dpt=new Emprunt();
           dpt.??????? //id_lecteur
           dpt.??????? //id_ouvr
            dpt.setDateDeb(deb);
            dpt.setDateFin(fin);
            dpt.setDateEff(eff);
            em.persist(dpt);
            em.flush();
            System.out.print("\nENregistrement effectué!" );
        }
        else
        {
            System.out.print("\nCe lecteur existe deja" );
        }
    }
}</gras>
PROBLEME : La persitance au niveau des classes Lecteur et Ouvrage passent correctement car il me faut utiliser une seule clé, tandis que la classe Emprunt me posent toujour probleme.en fait je me perd dans l'écriture de la methode "enregistrerEmprunt()" . Aussi comment pourrais-je l'invoquer dans une servlet?
 
qulequ'un peut-il me venir en aide?merci d'avence pr toutes vos réactions.

Reply

Marsh Posté le 15-11-2009 à 17:50:34   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed