2010-09-13 3 views
0

J'ai travaillé sur un projet en java + maven + spring + hibernate et je voulais assigner automatiquement la date actuelle aux POJO avant l'appel de saveorupdate. Cela ne me dérangerait pas de créer new Date() pour tous les date_created de toutes les classes, mais ils sont juste beaucoup. Je viens de découvrir que le printemps aop est bon pour ces choses.
Après quelques minutes sur google, j'ai trouvé une bonne façon de le faire. Mais jusqu'à présent, je ne vois pas exactement comment je peux assigner une nouvelle date à POJO qui sont ensuite des classes d'implémentation de mon interface d'introduction. comment mettre à faire sense.so de ma compréhension est ce que je ferais:Comment régler automatiquement date_created en utilisant spring aop

//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**/ 
    } 
} 

quelqu'un peut-il me montrer ce que je fais mal ici Ou c'est juste qu'il mauvaise façon de réaliser ce que je voulais? à faire.Merci de lire

Répondre

1

Si vous utilisez Hibernate, vous pouvez utiliser les écouteurs d'entité pour définir la propriété avant de la conserver dans la base de données.

Tout ce dont vous avez besoin est un écouteur de pré-persistance qui définit la date de création à new Date(). Il s'agit du Hibernate documentation on entity listeners.

+0

merci de lire maintenant !! mais si c'était la dernière modification qui ne peut pas être définie dans la base de données? –

+0

ok avec la méthode je vais devoir faire la même chose pour toute l'entité then.not vraiment utile quand tout est déjà créé et leur nombre significatif.thanks quand même –

+1

Pour la date de la dernière modification, le concept est le même. Il vous suffit de spécifier un écouteur de pré-mise à jour au lieu d'un écouteur de pré-persistance. –

Questions connexes