Problema CRUD

Hola a todos,

Soy nuevo en Vaadin y tengo poca experiencia con Java aunque he desarrollado en Grails en el pasado.

He conseguido poder guardar registros pero despues de dias probando me veo incapaz de editar y eliminar. Me siento gili*****, es algo que considero que tiene que ser sencillo y no se que estoy haciendo mal.

Por ejemplo, tengo una tabla el cual elimino el registro de la tabla visualmente pero luego no me ejecuta el cambio en la base de datos.

Button delete = new Button(“Delete”, new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Object userId = table.getValue();
table.removeItem(userId);
}
});

Agradezco por adelantado cualquier ayuda, si teneis algun ejemplo a mano por alli lo agradeceré (me da igual que esté en ingles :wink: )

Hola David,

Cómo estás cargando los datos en la tabla?

Por ejemplo si estás usando un SQLContainer los cambios no se impactaran en la base hasta que no hagas el commit en el container, en tu caso quedaría de la siguiente forma:

Button delete = new Button("Delete", new Button.ClickListener() { public void buttonClick(ClickEvent event) { Object userId = table.getValue(); table.removeItem(userId); try { container.commit(); } catch (SQLException e) { showError("Error when removing record!"); e.printStackTrace(); } } }); Espero que esto sea de ayuda.

Gracias por la ayuda Guillermo,

Hoy en conseguido resolverlo. Adjunto el código por si alguien le puede servir, aunque no sé si hay otra manera mejor de hacerlo…

package com.example.formtutorial;

import java.util.ArrayList;
import java.util.List;

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

import model.User;

public class UserService {
    
    
    public static List<User> getUsers() {
        
        List <User> users;
        
        try{
            String PERSISTENCE_UNIT_NAME = "Formtutorial";
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);         
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();    
            
            //CONSULTAR DADES
            Query query = entityManager.createNativeQuery("select * from USERS c", User.class);
            users = query.getResultList();
                        
               entityManager.getTransaction().commit();                                                       
               entityManager.close();

        }catch(Exception e){
            System.out.println("Error in UserService - > getUsers(): ");
            System.out.println(e.getMessage());
            users = new ArrayList<User>();
        }            

        return users;
    }
    
    public static void storeUser(User user){
        
        try{            
            String PERSISTENCE_UNIT_NAME = "Formtutorial";
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);         
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();                           
            
            entityManager.persist(user);
            
               entityManager.getTransaction().commit();
            entityManager.close();
            
        }catch(Exception e){
            System.out.println("Error in UserService - > storeUser(): ");
            System.out.println(e.getMessage());
        }            
    }
    
    public static void deleteUser(int userId) {
        
        try{                        
            String PERSISTENCE_UNIT_NAME = "Formtutorial";
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();       
            entityManager.clear();
            
            User newUser = entityManager.find(User.class, userId);                                    
            entityManager.remove(newUser);    
            
               entityManager.getTransaction().commit();
            entityManager.close();                    
        }catch(Exception e){
            System.out.println("Error in UserService - > updateUser(): ");
            System.out.println(e.getMessage());
        }    
    }

    public static  void updateUser(User user) {
        
        try{                    
            String PERSISTENCE_UNIT_NAME = "Formtutorial";
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();       
            entityManager.clear();
            
            User newUser = entityManager.find(User.class, user.getId());                        
            newUser.setMail(user.getMail());
            newUser.setPassword(user.getPassword());
            newUser.setUsername(user.getUsername());
            newUser.setPicture(user.getPicture());
        
            entityManager.merge(user);    
               entityManager.getTransaction().commit();
            entityManager.close();                    
        }catch(Exception e){
            System.out.println("Error in UserService - > updateUser(): ");
            System.out.println(e.getMessage());
        }        
    }    
}

Hola:

Creo que podrias realizar algo como esto:

[code]
public static void deleteUser(int userId) {

    try{                        
        String PERSISTENCE_UNIT_NAME = "Formtutorial";
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();       
        entityManager.clear();
        
        User newUser = entityManager.find(User.class, userId);                                    
        entityManager.remove(newUser);    
        
           entityManager.getTransaction().commit();
        entityManager.close();                    
    }catch(Exception e){
        System.out.println("Error in UserService - > updateUser(): ");
        System.out.println(e.getMessage());
    }    
}

[/code]Si ya logras obtener el id desde la tabla en vaadin, solo te quedaria hacer lo como lo siguiente:

User user = new User(); user.setId(id);//id es una variable del valor obtenido desde la tabla de vaadin UserService uService=new UserService(); uService.deleteUser(user); tuTabla.removeAllItems(); llenarTabla();//Deberias tener algo como esto para volver a refrescar la tabla. Espero te ayude.

Saludos.