Tôi có lớp sau đây:Các vấn đề với việc sử dụng @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();
}
Lớp này được sử dụng bởi tất cả các lớp thực thể của tôi.
Vì vậy, tôi có lớp sau
@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;
Và
@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;
Vì vậy, khi tôi tạo ra một khách hàng mới tôi nhận được lỗi sau:
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)
Tôi đang làm gì sai ở đây.
Bạn có thể vui lòng cung cấp toàn bộ stacktrace ngoại lệ của mình hay không. Tôi không nghĩ rằng bạn có vấn đề với 'PreUpdate' hoặc' PrePersist'. Thông điệp 'không null tài sản tham chiếu một giá trị null hoặc thoáng qua: vsg.ecotrak.dataaccess.domain.Address.lastUpdateDTM' nói rằng' lastUpdateDTM' là 'null' và có thể Hibernate không thành công trước khi kích hoạt bất kỳ' @Pre ... ' phương pháp. – kraftan