使用@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(); }
我的所有实体类都使用此类。
所以我有以下课程
@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;
和
@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;
因此,当我创建一个新客户时,我收到以下错误:
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)
我在这做错了什么
PrePersist
和PreUpdate
回调在MappedSuperclass
工作…至少在使用JPA的EntityManager
API时,这在您的情况下并不清楚。
您使用的是EntityManager
还是Session
API? 在后一种情况下,使用PreUpdate
注释的方法,JPA的PreUpdate
注释将不会被调用(我的建议是使用监听器或拦截器 )。
- 如何在表单,validation和ddl中重用字段长度?
- 什么是注释,它们如何真正适用于像Spring这样的框架?
- 为什么Spring的@Configurable有时可以工作,有时候不工作?
- 随着应用程序的增长,Struts 2validation无法正常工作
- @WebParam的@XmlElement(required = true)不起作用
- JSF 2使用@ManagedProperty注入Spring bean / service而没有xml
- 如何对Spring MVC带注释的控制器进行unit testing?
- 使用注释的Hibernate Enum映射
- AnnotationConfigApplicationContext和父上下文