Boa tarde, estou tentando criar um método para um DAO genérico onde de acordo com o objeto que vem no parametro o metódo verifica se aquele objeto existe no banco de dados, se existir ele da merge, senão ele persiste. Estou tentando usar reflection, e ele funciona com o merge, mas quando não existe ele vai direto para a exception do catch, tive algumas idéias, mas não consegui. No momento tenho esse código abaixo, alguma dica? Obrigado.
public void save(T object){
        try {
            Field declaredField = object.getClass().getDeclaredField("id");
            declaredField.setAccessible(true);
            if(this.manager.find(clazz, declaredField.get(object)) != null){
                this.manager.merge(object);
            }else{
                this.manager.persist(object);
            }
        } catch (IllegalArgumentException e) {
            this.manager.persist(object);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }