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持久化数据库的插入和测试