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 empleados) throws PreexistingEntityException, Exception {
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 empleados) throws NonexistentEntityException, Exception {
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 id) throws 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<Empleados> findEmpleadosEntities() {
return findEmpleadosEntities(true, -1, -1);
}
public List<Empleados> findEmpleadosEntities(int maxResults, int firstResult) {
return findEmpleadosEntities(false, maxResults, firstResult);
}
private List<Empleados> findEmpleadosEntities(boolean all, int maxResults, int 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<Empleados> rt = cq.from(Empleados.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.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.SEVERE, null, ex);
}
}
}
me lanza esta excepción
Código PHP:
Controladores.exceptions.IllegalOrphanException: This Departamentos (Entidades.Departamentos[ iddep=2 ]) cannot be destroyed since the Empleados Entidades.Empleados[ dni=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!!