Intenté poner los archivos del LoadRecords y los txt del github en mi proyecto, pero a la hora que corro el programa me salta la siguiente excepción:
Exception in thread "main" javax.persistence.NoResultException: No entity found for query at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1667) at com.latam.alura.tienda.dao.CategoriaDao.consultaPorNombre(CategoriaDao.java:30) at com.latam.alura.tienda.prueba.LoadRecords.loadProducto(LoadRecords.java:59) at com.latam.alura.tienda.prueba.LoadRecords.cargarRegistros(LoadRecords.java:33) at com.latam.alura.tienda.prueba.PruebaDeDesempenho.main(PruebaDeDesempenho.java:12)
Revisando, me dí cuenta que el programa no guarda ningún registro en la base de datos, no entiendo lo que esté pasando puesto que los módulos de registro de producto y registro de pedido funcionan y guardan todo correctamente. Este es el código del archivo que ingresé a mi proyecto:
LoadRecords.java:
public class LoadRecords {
public static void cargarRegistros() throws FileNotFoundException {
EntityManager em = JPAUtils.getEntityManager();
CategoriaDao categoriaDao = new CategoriaDao(em);
ProductoDao productoDao = new ProductoDao(em);
ClienteDao clienteDao = new ClienteDao(em);
PedidoDao pedidoDao = new PedidoDao(em);
em.getTransaction().begin();
loadCategoria("categoria",categoriaDao,em);
loadProducto("producto",productoDao,categoriaDao,em);
loadCliente("cliente",clienteDao,em);
List<Cliente> clientesList = clienteDao.consultarTodos();
List<Pedido> pedidoList= new ArrayList<>();
for(Cliente cl:clientesList) {
pedidoList.add(new Pedido(cl));
}
for(int i=0;i<pedidoList.size();i++) {
pedidoList.get(i).agregarItems(new ItemsPedido(i+1,productoDao.consultaPorId((long) (i+1)),pedidoList.get(i)));
pedidoDao.guardar(pedidoList.get(i));
}
em.getTransaction().commit();
em.close();
}
private static void loadProducto(String type, ProductoDao productoDao,CategoriaDao categoriaDao, EntityManager em) throws FileNotFoundException {
List<String> productosTxt =readFile(type);
for(int i=0;i<productosTxt.size();i++) {
String[] line = productosTxt.get(i).split(";");
if(line.length>1) {
Categoria categoria=categoriaDao.consultaPorNombre(line[3]);
Producto producto = new Producto(line[4],line[0],new BigDecimal(line[1]),categoria);
productoDao.guardar(producto);
em.flush();
}
}
}
private static void loadCategoria(String type, CategoriaDao categoriaDao,EntityManager em) throws FileNotFoundException {
List<String> categoriasTxt =readFile(type);
for(int i=0;i<categoriasTxt.size();i++) {
String[] line = categoriasTxt.get(i).split(";");
if(line.length==1) {
Categoria categoria = new Categoria(categoriasTxt.get(i));
System.out.println(categoria.getNombre());
categoriaDao.guardar(categoria);
em.flush();
}
}
}
private static void loadCliente(String type, ClienteDao clienteDao,EntityManager em) throws FileNotFoundException {
List<String> clientesTxt =readFile(type);
for(int i=0;i<clientesTxt.size();i++) {
String[] line = clientesTxt.get(i).split("~");
System.out.println(line[0]+line[1]);
if(line.length>1) {
Cliente cliente= new Cliente(line[0],line[1]);
clienteDao.guardar(cliente);
em.flush();
}
}
}
private static List<String> readFile(String type) throws FileNotFoundException {
File file = new File("F:\\Escuela\\OracleONE\\Java y JPA\\JPA-con-hibernate-Alura--stage-final\\tienda\\src\\main\\resources\\utils\\"+type+".txt");
Scanner scan = new Scanner(file);
List<String> pedido= new ArrayList<>();
while(scan.hasNextLine()){
pedido.add(scan.nextLine());
}
scan.close();
return pedido;
}
}
Y éste el código de la clase PruebaDeDesempenho:
public class PruebaDeDesempenho {
public static void main(String[] args) throws FileNotFoundException {
LoadRecords.cargarRegistros();
EntityManager em=JPAUtils.getEntityManager();
Pedido pedido = em.find(Pedido.class, 3l);
System.out.println(pedido.getFecha());
}
}
Espero que alguien pueda ayudarme