Mostrando entradas con la etiqueta JPA. Mostrar todas las entradas
Mostrando entradas con la etiqueta JPA. Mostrar todas las entradas

domingo, 23 de mayo de 2021

Java: Gettear y setear campos a objetos genéricos mediante Reflection

import java.lang.reflect.Field;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;

 

/**
     * Método de reflexión que busca por nombre de atributo en un objeto ese atributo
     * y devuelve su valor
     *
     * @param nombreAtributo
     * @param objetoDondeBuscar
     * @return
     */
    public static String buscaParametroPorNombre(final String nombreAtributo, final Object objetoDondeBuscar) {
        Class<?> c = objetoDondeBuscar.getClass();
        Field f = null;
        String result = null;
        do {
            try {
                f = c.getDeclaredField(nombreAtributo);
            } catch (NoSuchFieldException e) {
                log.debug("No se encuentra el campo: " + nombreAtributo);
            }

            if (f != null) {
                try {
                    f.setAccessible(true);
                    result = f.get(objetoDondeBuscar) != null ? String.valueOf(f.get(objetoDondeBuscar)) : null;
                } catch (IllegalAccessException e) {
                    log.debug("No se encuentra el campo: " + nombreAtributo, e);
                }
            }
            c = c.getSuperclass();
        } while ((c != null) && (c != Object.class));

        return result;
    }

    /**
     * Método de reflexión que setea el valor de un atributo en un objeto
     *
     * @param nombreAtributo
     * @param objetoDondeBuscar
     * @param valorAtributo
     * @return
     */
    public static String setParametroPorNombre(final String nombreAtributo, final Object objetoDondeBuscar,
                                               final String valorAtributo) {
        Class<?> c = objetoDondeBuscar.getClass();
        Field f = null;

        try {
            f = c.getDeclaredField(nombreAtributo);
        } catch (NoSuchFieldException e) {
            log.debug("No se encuentra el campo: " + nombreAtributo);
        }
        if (f != null) {
            try {
                f.setAccessible(true);
                f.set(objetoDondeBuscar, valorAtributo);
            } catch (IllegalAccessException e) {
                log.debug("Error al setear el atributo: " + nombreAtributo + "con valor: " + valorAtributo, e);
            }
        }
        return "OK";
    }

martes, 19 de enero de 2021

JPA - Anotaciones

 A nivel de CLASE

@Entity: indica que la clase es una entidad de BBDD.
@MappedSuperClass: indica que las clases que hereden de ésta (subclases), también heredarán las anotaciones de sus propiedades. Y que NO se creará una tabla en la BBDD para ésta clase.
@Inheritance(strategy = InheritanceType.JOINED): igual que la anterior, pero para esta clase sí se crea una tabla en la BBDD.
@Table(name = "table_name"): especifica el nombre de la tabla relacionada con la entidad.

JPA - Tipos de relaciones entre entidades.