2015-04-24 6 views
8

chciałbym mieć pola: creationDate i updateDate w Entity,JPA. Jak ignorować pewne pole tylko w operacji scalania

chciałbym tego pola muszą zostać zaktualizowane w db na persist operacji. Ale chciałbym pole creationDate nie będą aktualizowane na merge operacji w db.

szukam JPA adnotacji tak: @TransientOnMerge lub @IgnoreOnMerge Ale nie mogę znaleźć nic.

Czy to możliwe? Czy możesz pomóc?

+0

Odpowiedź jest również tutaj: https://stackoverflow.com/questions/29917148/jpa-columnupdatable-false-on-manytoone-related-field/29917204#29917204 – masterdany88

Odpowiedz

9

możesz dodać @Column (updatable = false) do pola encji.

+0

czy to będzie działać będzie rozwiązać mój problem. Sprawdzę to. Dzięki. – masterdany88

+0

Działa jak urok. Dziękuję Ci bardzo. – masterdany88

+0

To nie działa do końca. Po ustawieniu 'updatable = false' zarządzana instancja przekazana z powrotem z funkcji' merge' nadal powoduje nadpisanie tych wartości. Ignorowanie odbywa się tylko na poziomie DB. Chciałbym uzyskać zaktualizowaną wersję instancji. Jak mogę to zrobić? –

1

Można pracować z JPA EntityListener i zaktualizować dat na @PrePersist lub @PostPersist

PrePersist: Ta metoda zwrotna jest wywoływana dla danego podmiotu przed odpowiednie Wykonuje Entity Menedżer utrzymują operację dla tego podmiotu.

PostPersist: Ta metoda wywołania zwrotnego jest wywoływana dla danej jednostki po , gdy odpowiedni menedżer encji wykonuje operację utrwalania dla tej jednostki .

+0

To jest dobra droga. W metodzie '@ PreUpdate' mogłem uzyskać od db' creationDate' i ustawić go dla obiektu przed aktualizacją. Jaki efekt będzie poprawny. Ale '@Column (updatable = false) jest lepszym sposobem, jak myślę. – masterdany88

Powiązane problemy