2016-11-02 2 views
0

Ich bin neu im Frühling und ich bin verwirrt, wie @CreatedDate Annotation in einer Entität funktioniert.@CreatedDate Annotation funktioniert nicht mit mysql

Ich habe eine Google-Suche und es gab viele Lösungen, aber keiner von ihnen arbeitete für mich außer einem. Ich bin verwirrt warum?

Dies ist, was ich zuerst

@Entity 
@EntityListeners(AuditingEntityListener.class) 
public class User implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 

    @CreatedDate 
    private Date created; 

    public User(String name) { 

     this.name = name; 
    } 

    public User() { 
    } 

Es versucht, arbeiten nicht. Ich habe NULL für den Wert in created Spalte.

Dann habe ich das getan.

@Entity 
@EntityListeners(AuditingEntityListener.class) 
public class User implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 

    @CreatedDate 
    private Date created = new Date(); 

    public User(String name) { 

     this.name = name; 
    } 

    public User() { 
    } 

Dies tatsächlich gespeichert den Zeitstempel in der db. Meine Frage ist, dass die meisten der Tutorials, denen ich folgte, vorgeschlagen haben, dass ich new Date() nicht benötige, um den aktuellen Zeitstempel zu erhalten. Sieht so aus, als ob ich das brauche. Gibt es etwas, was mir fehlt?

+0

Haben Sie versucht das? http://StackOverflow.com/Questions/20483841/Spring-Data-CreatedDate-annotation-doesnt-Work-for-Me – developer

Antwort

2

Die @CreatedDate wird nicht von selbst funktionieren, wenn Sie nur @EntityListeners(AuditingEntityListener.class) auf Ihre Entitäten setzen. Damit es funktioniert, müssen Sie ein wenig mehr Konfiguration vornehmen.

Lassen Sie sich sagen, dass in Ihrer DB das Feld der @CreatedDate String-Typ ist, und Sie den Benutzer zurückzugeben, die zur Zeit in als Wert für @CreatedDate angemeldet ist, dann tun:

public class CustomAuditorAware implements AuditorAware<String> { 

    @Override 
    public String getCurrentAuditor() { 
     String loggedName = SecurityContextHolder.getContext().getAuthentication().getName(); 
     return loggedName; 
    } 

} 

Sie schreiben Es gibt keine Funktionalität, die Ihren Anforderungen entspricht, aber Sie müssen sicherlich eine Bean haben, die auf eine Klasse verweist, die AuditorAware implementiert. Der zweite Teil und ebenso wichtig ist, eine Bean zu erstellen, die diese Klasse mit Annotation @EnableJpaAuditing zurückgibt dies:

@Configuration 
@EnableJpaAuditing 
public class AuditorConfig { 

    @Bean 
    public CustomAuditorAware auditorProvider(){ 
     return new CustomAuditorAware(); 
    } 
} 

wenn Ihr Gift ist XML-Konfiguration dann tun:

<bean id="customAuditorAware" class="org.moshe.arad.general.CustomAuditorAware" /> 
    <jpa:auditing auditor-aware-ref="customAuditorAware"/> 
+2

Ich habe die gleiche Konfig, aber dies setzt Werte auf announced Feld @ CreatedBy' und '@ LastModifiedBy' . Andere Felder, die mit '@ LastModifiedDate' und' @ CreatedDate' versehen sind, sind immer null. Wie behebe ich das? –

Verwandte Themen