Hibernate PostUpdateEvent getState y el orden de los valores getOldState

ZoidbergV:

Un poco de historia de fondo. Estoy trabajando en un proyecto Java, utilizando datos de primavera, y necesito para registrar todos los cambios realizados en todas las entidades y qué tipo de cambio (tipo de evento) es (por ejemplo. INSERT, UPDATE, DELETE) en mongodb, de forma automatizada .

Para ello estoy usando postEventListeners de hibernación (PostInsertListener, PostUpdateListener y PostDeleteListener). Todo esto era bueno, pero ahora un cambio se ha realizado con el requisito original, y necesito para crear unos cuantos tipos de eventos (por ejemplo, inicio de sesión). Para crear el evento LOGIN, sin alterar por completo el código existente, me di cuenta que sólo puede tener una simple comprobación, para ver si la entidad que soy procesamiento es un usuario y si la única propiedad que se cambia es lastlogin.

if (entity instanceof User) {
            if(updateEvent.getDirtyProperties().length == 1 && updateEvent.getDirtyProperties()[0] == 8)
                history.setEventType(HistoryEvent.LOGIN);
}

UpdateEvent es un instace de PostUpdateEvent, a partir de la función onPostUpdate.

Esto está muy bien trabajando, pero mi aplicación actual no es ideal. En hibernación, getState () y getOldState () de retorno y Object [] que contiene todas las propiedades del objeto que se está actualizando. getDirtyProperties () devuelve el un conjunto de índices, índices de sólo las propiedades que no son los mismos en las matrices GetState y getOldState.

El problema que tengo es que el objeto [] devuelto por getState y getOldState contiene sólo los valores de las propiedades, y no puede averiguar el orden en que se encuentran. Por ahora sólo hardcoded el índice, pero esta solución es no es ideal, ya que si puedo añadir / eliminar una propiedad de la clase de usuario, el índice también es modificado, y tengo que averiguar cuál es el nuevo índice es y cambiarlo.

Mi pregunta es, ¿qué orden son las propiedades de la Object [], o cómo puedo cambiar mi código para que se no codificado el valor? ¿Hay una manera de conseguir un par, del valor de la propiedad en lugar de obtener sólo una matriz de valores?

ZoidbergV:

Así que en realidad encontramos la respuesta en un foro de hibernación.

I'l dejo el enlace para dar crédito a Vlad Mihalcea respuesta aquí

Para obtener los nombres de las propiedades utilizan este:

String[] properties = event.getPersister().getPropertyNames();

Y ahora con los índices de matriz y sabrá lo que la propiedad ha cambiado.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=219028&siteId=1
Recomendado
Clasificación