2010-11-08 12 views
5

que tienen la siguiente clase:Problemas con el uso de @PreUpdate

@MappedSuperclass 
public abstract class MappedModel 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id", nullable = false, unique = true) 
    private Long mId; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "rec_created_dtm", nullable = false, updatable = false) 
    private Date recordCreatedDTM; 

    @Column(name = "rec_cre_user_id", nullable = true, updatable = false) 
    private Long recordCreatedUserId; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "last_update_dtm", nullable = false) 
    private Date lastUpdateDTM; 

    @Column(name = "last_update_user_id", nullable = true) 
    private Long lastUpdateUserId; 

// @PrePersist 
// protected void onCreate() 
// { 
//  this.lastUpdateDTM = this.recordCreatedDTM = new Date(); 
// } 
// 
// @PreUpdate 
// protected void onUpdate() 
// { 
//  lastUpdateDTM = new Date(); 
// } 

    @PrePersist 
    @PreUpdate 
    protected void updateDates() { 
    if (this.recordCreatedDTM == null) { 
     this.recordCreatedDTM = new Date(); 
    } 
    lastUpdateDTM = new Date(); 
    } 

Esta clase es utilizada por todos mis clases de entidad.

Así que tienen la siguiente clase

@Entity 
@Table(name="customer") 
public class Customer extends MappedModel implements Serializable 
{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -2543425088717298236L; 


    @OneToOne(fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
    @JoinColumn(name="address_id",nullable=true,updatable=true,insertable=true) 
    private Address mAddress; 

Y

@Entity 
@Table(name="address") 
public class Address extends MappedModel implements Serializable 
{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -3505413538055124608L; 

    @Column(name="address_line_1", length=150, nullable=false) 
    private String mAddressLine; 

    @Column(name="city", length=150, nullable=false) 
    private String mCity; 

    @Column(name="state", length=2, nullable=true) 
    private String mState; 

    @Column(name="postal_code", length=10, nullable=false) 
    private String mPostalCode; 

Por lo tanto, cuando se crea un nuevo cliente me sale el siguiente error:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: vsg.ecotrak.dataaccess.domain.Address.lastUpdateDTM; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: vsg.ecotrak.dataaccess.domain.Address.lastUpdateDTM 

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 

¿Qué estoy haciendo mal aquí.

+0

Puede por favor proporcionar la pila completa de su excepción. No creo que tengas problemas con 'PreUpdate' o' PrePersist'. El mensaje '' propiedad no nula hace referencia a un valor nulo o transitorio: vsg.ecotrak.dataaccess.domain.Address.lastUpdateDTM' dice que 'lastUpdateDTM' es' null' y que probablemente Hibernate falla antes de activar cualquier '@Pre ...' métodos. – kraftan

Respuesta

9

El PrePersist y PreUpdate devoluciones de llamada funcionan en un MappedSuperclass ... al menos cuando se utiliza el API EntityManager de APP, que no es claro en su caso.

¿Está utilizando el EntityManager o el Session API? En el caso posterior, los métodos anotados usando las anotaciones PrePersist, PreUpdate de JPA no serán llamados (y mi sugerencia sería usar a listener or an interceptor).

+0

Usando Session - no usando JPA – boyd4715

+0

bien entonces no puede funcionar –

+0

bien eso tiene sentido entonces - supongo que lo perdí en la documentación - gracias – boyd4715

Cuestiones relacionadas