JPA @Forbigående felter ryddes, før @PreUpdate-metoden kaldes
Jeg løste dette ved at indstille opdaterbar og indsættelig til false i "transient"-feltet, så i dit tilfælde ville dette være:
@Column(name = "password", insertable = false, updatable = false)
private String password;
Derfor er en tabel @column påkrævet (hvilket er lidt grimt), men det vil aldrig blive udfyldt (hvilket var vigtigt i mit tilfælde af sikkerhedsmæssige årsager).
Jeg testede mod Hibernate 4.3.4.Final, og det virkede for mig. Feltværdien var brugbar i min EntityLister @PrePersist og @PreUpdate metoder, men blev ikke gemt i databasen.
Håber det hjælper nogen, der har lignende problemer.
Som nævnt i ovenstående svar, er dette design i specifikationerne. EclipseLink indeholder en hændelse (postMerge), som ikke er en del af JPA-specifikationen, som skal kaldes i det rigtige punkt i cyklussen for dig. I EclipseLink 2.1 kan Descriptor Event Adapter-klassen registreres ved hjælp af den almindelige @EventListeners-annotation, før 2.1 skal du tilføje selv ved hjælp af EclipseLink native API.
@EntityListeners({
a.b.MyEventListener.class,
})
package a.b;
import org.eclipse.persistence.descriptors.DescriptorEvent;
import org.eclipse.persistence.descriptors.DescriptorEventAdapter;
public class MyEventListener extends DescriptorEventAdapter {
public void postMerge(DescriptorEvent event) {
//event.getSession();
//event.getObject();
//event.getOriginalObject();
}
}