Problemas con el valor de recuperación JDBCTemplate establecido por LAST_INSERT_ID () truco mySQL

Para mí, me encontré con el mismo problema. Para INSERT ... ON DUPLICATE KEY UPDATE, GeneratedKeyHolder está lanzando una excepción porque espera que solo haya una clave devuelta, que no es el caso con MySQL. Básicamente tuve que implementar una nueva implementación de KeyHolder que puede manejar múltiples claves devueltas.

public class DuplicateKeyHolder implements KeyHolder {
    private final List<Map<String, Object>> keyList;

    /* Constructors */

    public Number getKey() throws InvalidDataAccessApiUsageException, DataRetrievalFailureException {
        if (this.keyList.isEmpty()) {
            return null;
        }
        Iterator<Object> keyIter = this.keyList.get(0).values().iterator();
        if (keyIter.hasNext()) {
            Object key = keyIter.next();
            if (!(key instanceof Number)) {
                throw new DataRetrievalFailureException(
                        "The generated key is not of a supported numeric type. " +
                        "Unable to cast [" + (key != null ? key.getClass().getName() : null) +
                        "] to [" + Number.class.getName() + "]");
            }
            return (Number) key;
        } else {
            throw new DataRetrievalFailureException("Unable to retrieve the generated key. " +
                    "Check that the table has an identity column enabled.");
        }
    }

    public Map<String, Object> getKeys() throws InvalidDataAccessApiUsageException {
        if (this.keyList.isEmpty()) {
            return null;
        }
        return this.keyList.get(0);
    }

    public List<Map<String, Object>> getKeyList() {
        return this.keyList;
    }
}

Si solo usa esta clase donde de lo contrario usaría GeneratedKeyHolder, todo funciona. Y descubrí que ni siquiera necesita agregar ... ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id) ...su declaración de inserción.

Respuesta 1

Estoy tratando de ejecutar mi archivo de características. Ejecutar como función de pepino en Eclipse. Pero recibo un error. Cuando estoy tratando de ejecutar la clase Runner (con pepino JVM + JUnit). Está funcionando bien. Nota :- ...

¿Qué sucedió si no hay valor para algunos campos de clase en el archivo xml durante la desagregación JAXB? ¿JAXB simplemente "omitió" este valor y los dejó sin inicializar?

He estado jugando con Selenium 2 por un tiempo, con el propósito de ejecutar pruebas automatizadas. Mi objetivo es escribir pruebas en Java y ejecutar cada prueba en diferentes navegadores, simultáneamente si ...

En mi archivo pom ejecuto un complemento de compilación con esta configuración. ¿Puedo acceder a customProp desde dentro del código del complemento? <ejecución> ... <configuración> <opciones de configuración> & ...