2017-02-12 2 views
1

Ich benutze Spring Boot und habe meiner JPA-Entity @PostConstrcut-Annotation wie gezeigt hinzugefügt, aber wenn die Entity instanziiert wird, wird dieser Interceptor nie aufgerufen.@PostConstruct auf JPA-Entität, die nicht im Spring Boot aufgerufen wird

@Entity 
public class MyTableName implements java.io.Serializable { 
    // all attributes 
    @PostConstruct 
    public void init(){ 
    // This code never called 
    System.out.println("PostConstruct"); 
    } 
} 

Antwort

0

Ich fand die Lösung, tatsächlich, anstatt die @ PostConstruct Annotation (verwaltet von Container), ich @PostLoad (verwaltet von ORM). Vielen Dank.

1

Sie müssen nur sicherstellen, dass das Unternehmen auch als Feder Managed Bean registriert, können Sie, indem @Component Anmerkung auf der Klasse MyTableName tun können.

0

Warum möchten Sie ein @PostConstruct in einer Entity-Bean haben? Ich denke, hier riecht es nach Design. Vielleicht verweisen Sie auf Methoden mit @PrePersist-, @PreUpdate- oder @PostPersist @PostUpdate-Annotationen, die Code vor oder nach dem Speichern der Entity ausführen?

+0

Ich habe nicht den gesamten Code in dieser Klasse angezeigt, aber diese Entität hat andere Attribute mit @Transient-Annotation (Attribute, die ich nicht beibehalten werde), und ich möchte nach der Instanziierung dieser Entität Werte zu diesen Attributen hinzufügen . –

3

JPA Entities sind keine Spring-Beans, deshalb wird Spring niemals aufrufen. Entitäten haben ihre eigenen Entity-Listener-Annotationen, aber es gibt nichts mit der Semantik von (@PrePersiste und @PostLoad sind wahrscheinlich am nächsten). Entitäten müssen einen Standardkonstruktor haben, da alle JPA-Implementierungen Class.newInstance() als Standardinstanziierungsrichtlinie verwenden. Ein guter JPA-Provider ermöglicht es Ihnen, die Instanziierungsrichtlinie anzupassen, so dass es möglich ist, Ihr eigenes Interception von zu schreiben und es aufzurufen, es ist auch möglich, @Autowire Bohnen in Entitäten einzufügen, wenn Sie möchten. Sie sollten JPA-Entitäten jedoch niemals als Spring-Beans registrieren.

Verwandte Themen