Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/02/2013, 13:28
ARAPSPGON
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: JPA Controladores de Entidades Relacionadas

Clase EmpleadosJpaController

Código PHP:
package Controladores;

import Controladores.exceptions.NonexistentEntityException;
import Controladores.exceptions.PreexistingEntityException;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import Entidades.Departamentos;
import Entidades.Empleados;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

public class 
EmpleadosJpaController implements Serializable {

    public 
EmpleadosJpaController(EntityManagerFactory emf) {
        
this.emf emf;
    }
    private 
EntityManagerFactory emf null;

    public 
EntityManager getEntityManager() {
        return 
emf.createEntityManager();
    }

    public 
void create(Empleados empleadosthrows PreexistingEntityExceptionException {
        
EntityManager em null;
        try {
            
em getEntityManager();
            
em.getTransaction().begin();
            
Departamentos iddep empleados.getIddep();
            if (
iddep != null) {
                
iddep em.getReference(iddep.getClass(), iddep.getIddep());
                
empleados.setIddep(iddep);
            }
            
em.persist(empleados);
            if (
iddep != null) {
                
iddep.getEmpleadosCollection().add(empleados);
                
iddep em.merge(iddep);
            }
            
em.getTransaction().commit();
        } catch (
Exception ex) {
            if (
findEmpleados(empleados.getDni()) != null) {
                throw new 
PreexistingEntityException("Empleados " empleados " already exists."ex);
            }
            throw 
ex;
        } 
finally {
            if (
em != null) {
                
em.close();
            }
        }
    }

    public 
void edit(Empleados empleadosthrows NonexistentEntityExceptionException {
        
EntityManager em null;
        try {
            
em getEntityManager();
            
em.getTransaction().begin();
            
Empleados persistentEmpleados em.find(Empleados.class, empleados.getDni());
            
Departamentos iddepOld persistentEmpleados.getIddep();
            
Departamentos iddepNew empleados.getIddep();
            if (
iddepNew != null) {
                
iddepNew em.getReference(iddepNew.getClass(), iddepNew.getIddep());
                
empleados.setIddep(iddepNew);
            }
            
empleados em.merge(empleados);
            if (
iddepOld != null && !iddepOld.equals(iddepNew)) {
                
iddepOld.getEmpleadosCollection().remove(empleados);
                
iddepOld em.merge(iddepOld);
            }
            if (
iddepNew != null && !iddepNew.equals(iddepOld)) {
                
iddepNew.getEmpleadosCollection().add(empleados);
                
iddepNew em.merge(iddepNew);
            }
            
em.getTransaction().commit();
        } catch (
Exception ex) {
            
String msg ex.getLocalizedMessage();
            if (
msg == null || msg.length() == 0) {
                
String id empleados.getDni();
                if (
findEmpleados(id) == null) {
                    throw new 
NonexistentEntityException("The empleados with id " id " no longer exists.");
                }
            }
            throw 
ex;
        } 
finally {
            if (
em != null) {
                
em.close();
            }
        }
    }

    public 
void destroy(String idthrows NonexistentEntityException {
        
EntityManager em null;
        try {
            
em getEntityManager();
            
em.getTransaction().begin();
            
Empleados empleados;
            try {
                
empleados em.getReference(Empleados.class, id);
                
empleados.getDni();
            } catch (
EntityNotFoundException enfe) {
                throw new 
NonexistentEntityException("The empleados with id " id " no longer exists."enfe);
            }
            
Departamentos iddep empleados.getIddep();
            if (
iddep != null) {
                
iddep.getEmpleadosCollection().remove(empleados);
                
iddep em.merge(iddep);
            }
            
em.remove(empleados);
            
em.getTransaction().commit();
        } 
finally {
            if (
em != null) {
                
em.close();
            }
        }
    }

    public List<
EmpleadosfindEmpleadosEntities() {
        return 
findEmpleadosEntities(true, -1, -1);
    }

    public List<
EmpleadosfindEmpleadosEntities(int maxResultsint firstResult) {
        return 
findEmpleadosEntities(falsemaxResultsfirstResult);
    }

    private List<
EmpleadosfindEmpleadosEntities(boolean allint maxResultsint firstResult) {
        
EntityManager em getEntityManager();
        try {
            
CriteriaQuery cq em.getCriteriaBuilder().createQuery();
            
cq.select(cq.from(Empleados.class));
            
Query q em.createQuery(cq);
            if (!
all) {
                
q.setMaxResults(maxResults);
                
q.setFirstResult(firstResult);
            }
            return 
q.getResultList();
        } 
finally {
            
em.close();
        }
    }

    public 
Empleados findEmpleados(String id) {
        
EntityManager em getEntityManager();
        try {
            return 
em.find(Empleados.class, id);
        } 
finally {
            
em.close();
        }
    }

    public 
int getEmpleadosCount() {
        
EntityManager em getEntityManager();
        try {
            
CriteriaQuery cq em.getCriteriaBuilder().createQuery();
            
Root<Empleadosrt cq.from(Empleados.class);
            
cq.select(em.getCriteriaBuilder().count(rt));
            
Query q em.createQuery(cq);
            return ((
Longq.getSingleResult()).intValue();
        } 
finally {
            
em.close();
        }
    }
    


Hago una insercion y un update usando los metodos de las clases controladoras sin problema pero al probar hacer un borrado de un departamento no me deja si hay algun empleado en ese departamento.. me lanza un IllegalOrphanException

no se si tengo que modificar los metodos que me genera netbeans o no.

el codigo del main es el siguiente:

Código PHP:
package App;

import Controladores.*;
import Controladores.exceptions.IllegalOrphanException;
import Controladores.exceptions.NonexistentEntityException;
import Controladores.exceptions.PreexistingEntityException;
import Entidades.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class 
Main {

    public static 
void main(String args[]) {
        
//inicializamos el EntityManagerFactory
        
EntityManagerFactory emf Persistence.createEntityManagerFactory("empresaPU");

        
// instanciamos objetos de las clase controladora Departamentos
        
DepartamentosJpaController controlD = new DepartamentosJpaController(emf);
        
EmpleadosJpaController controlE = new EmpleadosJpaController(emf);
        try {                              
            
// utilizamos el metodo destroy para eliminar el departamento
            // al metodo solo le pasamos el id del departamento
            // Este método bucará por la propiedad id el registro 
            // en el base de datos para persistir los cambios
            
controlD.destroy(2);
        } catch (
IllegalOrphanException NonexistentEntityException ex) {
            
Logger.getLogger(Main.class.getName()).log(Level.SEVEREnullex);
        }

    }

me lanza esta excepción

Código PHP:
Controladores.exceptions.IllegalOrphanExceptionThis Departamentos (Entidades.Departamentosiddep=]) cannot be destroyed since the Empleados Entidades.Empleadosdni=22222222D in its empleadosCollection field has a non-nullable iddep field
no lo entiendo se supone que netbeans tendria que generar los metodos para que pudiese borrar un departamento y automaticamente cualquier empleado de ese departamento sin tener que modificarlo ....no entiendo esa IllegalOrphanException!!