JPA 持久性我不确定这是否正确

问题描述 投票:0回答:0

JPA 与 mysql 的持久性。我参加了 1:N 课程,但不知道它是否正确?

1
@Entity
@Table(name = "clientes", uniqueConstraints = @UniqueConstraint(columnNames = "dni"))
public class ClienteVO {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idcliente;
    private String nombre;
    private String dni;
    private int telefono;
    @OneToMany(mappedBy = "cliente")
    private List<VehiculoVO> vehiculos;

N
@Entity
@Table(name = "vehiculos", uniqueConstraints = @UniqueConstraint(columnNames = "modelo"))
public class VehiculoVO {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idvehiculo;
    private String marca;
    private String modelo;
    private LocalDate fechacreacion;
    @ManyToOne
    @JoinColumn(name = "idcliente")
    private ClienteVO cliente;


    int insertar(ClienteVO cliente);
    int eliminar(ClienteVO cliente);
    int modificar(ClienteVO cliente);
    Optional<List<ClienteVO>> findByNombre(String nombre);
    Optional<ClienteVO> findByDni(String dni);

DAO 导入

    private EntityManager em;
    
    

    public VehiculoDAOImpl(EntityManager em) {
        super();
        this.em = em;
    }

    public int insertar(VehiculoVO vehiculo) {
        try {
            em.getTransaction().begin();
            em.persist(vehiculo);
            em.getTransaction().commit();
            return 1;
        } catch (PersistenceException e) {
            System.out.println("Error de persistencia");
            em.getTransaction().rollback();
            return 2;
        } catch (Exception e) {
            System.out.println("Error al insertar vehiculo: "+e.getMessage());
            em.getTransaction().rollback();
        } return 0;
    }

    public int eliminar(VehiculoVO vehiculo) {
        try {
            em.getTransaction().begin();
            em.remove(vehiculo);
            em.getTransaction().commit();
            return 1;
        } catch (Exception e) {
            System.out.println("Error al eliminar vehiculo: "+e.getMessage());
            em.getTransaction().rollback();
        } return 0;
    }

    public int modificar(VehiculoVO vehiculo) {
        try {
            em.getTransaction().begin();
            em.merge(vehiculo);
            em.getTransaction().commit();
            return 1;
        } catch (PersistenceException e) {
            System.out.println("Error de persistencia");
            em.getTransaction().rollback();
            return 2;
        } catch (Exception e) {
            System.out.println("Error al modificar vehiculo: "+e.getMessage());
            em.getTransaction().rollback();
        } return 0;
    }

    public Optional<List<VehiculoVO>> findByMarca(String marca) {
        try {
            TypedQuery<VehiculoVO> consulta = em.createQuery("SELECT v FROM VehiculoVO v WHERE marca=?1", VehiculoVO.class);
            consulta.setParameter(1, marca);
            List<VehiculoVO> vehiculos = consulta.getResultList();
            return Optional.of(vehiculos);
        } catch (PersistenceException e) {
            System.out.println("Error de persistencia");
        } catch (Exception e) {
            System.out.println("Error al buscar vehiculos por marca: "+e.getMessage());
        } return Optional.empty();
    }

    public Optional<VehiculoVO> findByModelo(String modelo) {
        try {
            TypedQuery<VehiculoVO> consulta = em.createQuery("SELECT v FROM VehiculoVO v WHERE modelo=?1", VehiculoVO.class);
            consulta.setParameter(1, modelo);
            return Optional.of(consulta.getSingleResult());
        } catch (PersistenceException e) {
            System.out.println("Error de persistencia");
            return Optional.of(new VehiculoVO());
        } catch (Exception e) {
            System.out.println("Error al buscar vehiculos por modelo: "+e.getMessage());
        } return Optional.empty();
    }

    public Optional<List<VehiculoVO>> findByCliente(ClienteVO cliente) {
        try {
            TypedQuery<VehiculoVO> consulta = em.createQuery("SELECT v FROM VehiculoVO v WHERE v.cliente=?1 ",VehiculoVO.class);
            consulta.setParameter(1, cliente);
            List<VehiculoVO> vehiculos = consulta.getResultList();
            return Optional.of(vehiculos);
        } catch (PersistenceException e) {
            System.out.println("Error de persistencia");
        } catch(Exception e) {
            System.out.println("Error al buscar vehiculos por cliente: "+e.getMessage());
        } return Optional.empty();
    }

}

ServicioImp

    
    private DAOFactory factoria;
    private ClienteDAO cd;
    
    public ServicioClienteImpl() {
        factoria=DAOFactory.conectarPatron();
        cd=factoria.getClienteDAOImpl();
    }

    public int insertar(ClienteVO cliente) {
        return cd.insertar(cliente);
    }

    public int eliminar(ClienteVO cliente) {
        return cd.eliminar(cliente);
    }

    public int modificar(ClienteVO cliente) {
        return cd.modificar(cliente);
    }

    public Optional<List<ClienteVO>> findByNombre(String nombre) {
        return cd.findByNombre(nombre);
    }

    public Optional<ClienteVO> findByDni(String dni) {
        return cd.findByDni(dni);
    }
    
    

DAO 工厂

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.dawes.dao.ClienteDAO;
import com.dawes.dao.VehiculoDAO;
import com.dawes.daoimpl.ClienteDAOImpl;
import com.dawes.daoimpl.VehiculoDAOImpl;

public class DAOFactory {
    
    private EntityManager em;
    private static DAOFactory factoria;
    
    private DAOFactory() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa");
        em=emf.createEntityManager();
    }
    
    public static DAOFactory conectarPatron() {
        if(factoria==null) {
            return new DAOFactory();
        } return factoria;
    }
    
    public ClienteDAO getClienteDAOImpl() {
        return new ClienteDAOImpl(em);
    }
    
    public VehiculoDAO getVehiculoDAOImpl() {
        return new VehiculoDAOImpl(em);
    }

}

测试

package com.dawes;



import static org.junit.Assert.assertEquals;

import java.time.LocalDate;
import java.util.ArrayList;

import org.junit.Test;

import com.dawes.modelo.ClienteVO;
import com.dawes.modelo.VehiculoVO;
import com.dawes.servicios.ServicioCliente;
import com.dawes.servicios.ServicioClienteImpl;
import com.dawes.servicios.ServicioVehiculo;
import com.dawes.servicios.ServicioVehiculoImpl;

public class TestTaller {
    
    static ServicioCliente sc = new ServicioClienteImpl();
    static ServicioVehiculo sv = new ServicioVehiculoImpl();

    @Test
    public void test01() {
        sc.insertar(new ClienteVO("Pelayo","584235",670,new ArrayList<VehiculoVO>()));
        sc.insertar(new ClienteVO("Pelayo","3344455",670,new ArrayList<VehiculoVO>()));
        sc.insertar(new ClienteVO("Manuel","492674",283,new ArrayList<VehiculoVO>()));
        sc.insertar(new ClienteVO("Antonio","124790",620,new ArrayList<VehiculoVO>()));
        assertEquals(1,sc.insertar(new ClienteVO("Lucas","698305",683,new ArrayList<VehiculoVO>())));
    }
    
    @Test
    public void test02() {
        sv.insertar(new VehiculoVO("Citroen","C3",LocalDate.of(2005, 05, 12),sc.findByDni("124790").get()));
        sv.insertar(new VehiculoVO("Citroen","C4",LocalDate.of(2005, 05, 12),sc.findByDni("584235").get()));
        assertEquals(1,sv.insertar(new VehiculoVO("Citroen","C5",LocalDate.of(2005, 05, 12),sc.findByDni("492674").get())));
    }
    
    
    @Test
    public void test03() {
        assertEquals(2,sc.findByNombre("Pelayo").get().size());
    }
    
    
    @Test
    public void test04() {
        assertEquals(1,sv.findByCliente(sc.findByDni("124790").get()).get().size());
    }
    
    @Test
    public void test05() {
        assertEquals(3,sv.findByMarca("Citroen").get().size());
    }
    
    
    @Test
    public void test06() {
        VehiculoVO vv = sv.findByModelo("C3").get();
        vv.setCliente(sc.findByDni("698305").get());
        assertEquals(1,sv.modificar(vv));
    }

}

JPA持久化数据库的插入和测试 JPA持久化数据库的插入和测试

JPA持久化数据库的插入和测试 JPA持久化数据库的插入和测试

JPA持久化数据库的插入和测试

JPA持久化数据库的插入和测试

v

v

JPA持久化数据库的插入和测试

JPA持久化数据库的插入和测试 JPA持久化数据库的插入和测试

JPA持久化数据库的插入和测试

jpa persistence
© www.soinside.com 2019 - 2024. All rights reserved.