Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    problema con Entity manager

    salve raga oggi ho iniziato un nuovo progetto, comprato il pc nuovo e sono passato a seven (mi sa che sto per ripassare a linux). Comunque ho scontrato un nuovo problema mai incontrato prima d'ora.Illustro il mio problema.
    Devo creare un semplice programma manageriale per un ristorante di media dimensione, le solite cose, cioe gestione dipendenti, magazzino fattura e asporto. sarebbero un 17 tabelle del db compreso tabelle relazionali.

    Vi spiego i procedimenti, che ho fatto io:
    1. creo un nuovo progetto con new java project.
    2. creo un package entity e faccio new entity class for database.
    3. mi creo le varie classi del progetto che avevo sviluppato in uml(tute solo fittizie generate con il tool)
    4. mi sono implementato la prima classe GestioneDipendente utilizzando la PersistenceManager
    codice:
    package classi;
    
    import java.util.List;
    import entity.*;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
    public class GestoreDipendente {
    //
    //    String cf;
    //    String nome;
    //    String cognome;
    //    String indirizzo;
    //    String tel;
    //    String ruolo;
    //    double stipedio;
    //    String contratto;
    
        Dipendente dipendente;
        @PersistenceContext
        private EntityManager em;
        
        public GestoreDipendente(String cf, String nome, String cognome, String indirizzo, Integer tel, String ruolo, double stipendio, String contratto, String descrContratto) {
            dipendente = new Dipendente(cf, nome, cognome, indirizzo, tel, ruolo, stipendio);
            dipendente.setDescrizioneContratto(descrContratto);
            dipendente.setTipodicontratto(contratto);// il tipo do contratto che è stato stipulato col dipendente 
    
    //        this.cf = cf;
    //        this.nome = nome;
    //        this.cognome = cognome;
    //        this.indirizzo = indirizzo;
    //        this.tel = tel;
    //        this.ruolo = ruolo;
    //        this.stipedio = stipendio;
    //        this.contratto = contratto;
    
        }
        
        public void cerca() {
            throw new UnsupportedOperationException();
        }
        
        public List<Dipendente> generaLista() {
            List<Dipendente> dList = em.createNamedQuery("Dipendente.findAll").getResultList();
            return dList;
        }
        /*forse n serve sarebbero la genericaLista, molto semplice e nemo costosa*/
    
        public Object[][] generaMatrice() {
            throw new UnsupportedOperationException();
        }
        
        public String getRuolo() {
            return dipendente.getRuolo();
        }
        
        public void inserisciDipendente() {
            System.out.println(dipendente.toString()+dipendente.getCognome());
            boolean open = em.isOpen();
            em.persist(dipendente);
        }
        
        public void modificaDipendente() {        
            em.merge(dipendente);
            
        }
        
        public void rimuoviDipendente() {
            em.remove(em.merge(dipendente));
        }
        
        public List<Dipendente> visualizzaDipendente() {
            throw new UnsupportedOperationException();
        }
    }
    Visto che era un po che non usavo gli entity ho detto testiamo se la classe funziona:
    ho creato un semplice main ed ho provato ad aggiungere un dipendente nel db, ma mi da un errore:
    codice:
    Exception in thread "main" java.lang.NullPointerException
    	at classi.GestoreDipendente.inserisciDipendente(GestoreDipendente.java:59)
    	at ristoranteGui.Ristorante.main(Ristorante.java:33)
    Java Result: 1
    facendo il debug il codice si blocca su questa liena di codice:
    codice:
    boolean open = em.isOpen();
    perché l'entitymanager em in quel istante risulta essere nullo. sapete dove sta il problema. riguardando vari codici su internet, nessuno inizializza l'entity manager.

    forse cera un altro passaggio per settare la persistenza che ora mi sfugge.


    grazie in anticipo.

  2. #2
    A parte il fatto che è meglio specificare sempre il tipo di implementazione che viene usato, cmq l'errore scusa se te lo dico ma è grande come una casa:
    codice:
    @PersistenceContext
        private EntityManager em;
    Chi vuoi che si occupi di popolare l'entity manager.....
    Sicuramente non l'ejb container dato che non esiste....

  3. #3
    ummm.. scusami non capisco.

    quando ho usato gli entity lo usato in ambito enterprise, ora volevo usarli senza ejb solo per collegarmi al db e non fare la solita connessione. non volevo usare gli ejb, ma solo gli entity manager. se non ricordo male i potevano usare o sbaglio.

    se no ritorno al vecchio metodo.

    cioe la solita connessione

  4. #4
    Originariamente inviato da orphenix
    ummm.. scusami non capisco.

    quando ho usato gli entity lo usato in ambito enterprise
    Infatti la "resource injection" funziona solo in abito enterprise
    ora volevo usarli senza ejb solo per collegarmi al db e non fare la solita connessione. non volevo usare gli ejb, ma solo gli entity manager. se non ricordo male i potevano usare o sbaglio.
    Ovvio che puoi usare l'entity manager (senza ejb) ma devi preoccuparti tu di instanziare il contesto di persistenza (PersistenceContext) e come farlo dipende dall'implementazione di JPA che stai usando.

  5. #5
    grazie per la tua risposta... ho trovato questa codice che ne pensi:

    http://www.java2s.com/Code/Java/JPA/...ityManager.htm

    altrimenti mi potresti dare te qualche link utile per imparare ad usare gli entity senza ejb.


    cioe nel mio caso creo gli entity, e creo el varie classi gestioni e queste classi fanno le query senza conoscere il db tipo entitymanager.persistense(dipendente);

    qualcosa del genere cosi posso rendere il db aperto alle modifiche.


    grazie

  6. #6
    Le istruzione per creare l'entity manager sono queste:
    codice:
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService");
    EntityManager em = emf.createEntityManager();
    qualcosa del genere cosi posso rendere il db aperto alle modifiche.
    Dipende da cosa intendi.
    Nel persistence.xml dovrai cmq "legarti" ad un database.
    Poi è ovvio che se usi solo ed esclusivamente JPA non avrai problemi a cambiare database in quanto JPA è un standard e tutte le implementazione fanno fede ad esso.
    Per quanto riguardi il
    link non c'è niente di meglio del tutorial ufficiale

  7. #7
    ti ringrazio molto. leggero il tutorial ufficiale.

    infatti ilmio obbiettivo era quello di utilizzare solo le jpa per facilitarmi l'implementazione degli entity e rendere il db aperto alle modifiche tipo aggiungere una colonna ad una tabella oppure una nuova tabella(bhe in questo caso forse dovrei modificare qualche codice ^^).

    tnks della disponibilita

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.