Как автоматически установить date_created, используя spring aop

Я работал над проектом в Java+ Maven+ Spring+ Hibernate и я хотел автоматически назначить текущую дату POJO перед вызовом saveorupdate. я не против создать new Date() для всех date_created всех классов, но их просто много. Я только что обнаружил, что Spring Aop хорош в этих вещах.
После нескольких минут в Google я нашел хороший способ сделать это. Но до сих пор я не могу понять, как именно я могу назначить новую дату для POJO, которые затем являются классами реализации моего вводного интерфейса. Я действительно не знаю, как чтобы это имело смысл. Так что из моего понимания я бы поступил так:

//DateSetter.java
package org.personal.myproject.model;

import java.util.Date;
//this is how i'm getting the current date
public interface DateSetter {

   public Date getCurrentDate();

}


//DateCreatedDateSetterImpl.java
package org.personal.myproject.model;

import java.util.Date;
// the implementation
public class DateCreatedDateSetterImpl implements DateSetter {

  public Date getCurrentDate() {
    return new Date();
  }

}

//DateIntroduction.java
package org.personal.myproject.model;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.DeclareParents;

@Aspect
public class DateIntroduction {
    //making all the model implementors of the DateSetter interface
    @DeclareParents(value="org.personal.myproject.model.*",
    defaultImpl=DateCreatedDateSetterImpll.class)
    public DateSetter dateSetter;

    /**here is to add my "before trigger" for every calling of every method.
       if you can see i have the daos in 2 packages, i don't know whether is wrong or         not.i'm actually using the generic Dao so should i use that interface instead?
    **/
    @Before("execution * org.personal.myproject.dao.hibernate.*.(..) || *    org.personal.myproject.dao.hibernate.*.*.(..)" + "&& this(dateSetter)")
    public void injectLastModifiedDate(DateSetter dateSetter){
      /**so here i'm expecting to inject the new date but apparently i'm missing something**/
    }
}

Может кто-нибудь показать мне, что я делаю здесь неправильно? Или это просто неправильный способ добиться того, что я хотел сделать. Спасибо за чтение

1 ответ

Решение

Если вы используете Hibernate, вы можете использовать прослушиватели сущностей для установки свойства перед его сохранением в базе данных.

Все, что вам нужно, это предварительно прослушивающий слушатель, который устанавливает дату создания new Date(),

Вот документация Hibernate о прослушивателях сущностей.

Другие вопросы по тегам