Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @PreUpdate的使用问题_Java_Hibernate_Jpa_Annotations - Fatal编程技术网

Java @PreUpdate的使用问题

Java @PreUpdate的使用问题,java,hibernate,jpa,annotations,Java,Hibernate,Jpa,Annotations,我有以下课程: @MappedSuperclass public abstract class MappedModel { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", nullable = false, unique = true) private Long mId; @Temporal(TemporalType.TIMESTAMP) @

我有以下课程:

    @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;

因此,当我创建新客户时,会出现以下错误:

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
还是
会话
API?在后一种情况下,使用JPA的
PrePersist
PreUpdate
注释进行注释的方法将不会被调用(我的建议是使用)。

请提供异常的完整堆栈跟踪。我认为您对
PreUpdate
PrePersist
没有问题。消息
not null属性引用了一个null或暂时值:vsg.ecotrak.dataaccess.domain.Address.lastUpdateDTM
表示
lastUpdateDTM
null
,并且可能在触发任何
@Pre…
方法之前休眠失败。使用会话-不使用有意义的JPAwell-猜我错过了在文档中-谢谢,实际上,我们可以使用JPA回调和Hibernate会话:
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)