@PreUpdate的使用问题
我有以下课程:
@MappedSuperclasspublic 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.lastUpdateDTMorg.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)
我在这里做错了。
回答:
至少在使用JPA 的API 时,PrePersist
and
PreUpdate
回调确实在MappedSuperclass
…中工作EntityManager
,这在您的情况下还不清楚。
您在使用EntityManager
还是Session
API?在后一种情况下,使用注解的方法PrePersist
,PreUpdate
从JPA注释将不会被调用(和我的建议是使用监听器或拦截器)。
以上是 @PreUpdate的使用问题 的全部内容, 来源链接: utcz.com/qa/428387.html