Java >> Java tutorial >  >> Tag >> transient

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();
 }
}

Java tag