【问题标题】:Hibernate with Annotations and MySQL: Creation Date带有注释和 MySQL 的休眠:创建日期
【发布时间】:2011-03-20 01:37:40
【问题描述】:

我尝试保存我的实体的创建日期。我找到了that 方法。 我试图实现它,但日期没有到达我的数据库表。

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.PrePersist;

@Entity
public class Project implements Serializable {

 private static final long serialVersionUID = 7620757776698607619L;

 @Id
 int id;
 String title;
 Date created;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public String getTitle() {
  return title;
 }

 @PrePersist
 protected void onCreate() {
   created = new Date();
 }

 public Date getCreated() {
  return created;
 }

}

只保存标题。数据字段为空:-(

我的错误在哪里?谢谢你帮助我。


更新

我尝试添加 pascal 的注释,但没有帮助。 是否有可能我应该使用 sql.date 而不是 utils.date。我试试这个,但我找不到如何获取今天的日期...

【问题讨论】:

  • 我从来没有说过添加@Temporal 可以解决问题。但是,您是否尝试添加二传手?不,使用 java.sql.Date 不应该改变任何东西,java.util.Date 很好,尤其是在业务对象中。
  • 感谢您的帮助。 setter 没有改变任何东西 :-(。我尝试添加一些其他字段。除了 Date 类型的数据之外,一切正常。Weired

标签: java mysql hibernate annotations orm


【解决方案1】:

我没有成功,但我找到了另一种方法:

@Entity
public class Project {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private Date created;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }
}

那是我的 EntityObject...我将其保留为标准方式并将逻辑放入位于上方的控制器层中:

public String saveNewProject() {
    projectData.getProjectDTO().setCreated(new Date());
    projectService.addProject(projectData.getProjectDTO());

实际上我更喜欢这种方式,因为如果有一天我替换持久层,我就不必转移逻辑了……干杯

【讨论】:

    【解决方案2】:

    我想知道created 日期缺少设置器是否不是问题。顺便说一句,我还将在created 日期上定义一个Temporal 注释以保存日期时间。像这样的:

    @Entity
    public class Project implements Serializable {
    
        @Id
        private int id;
        private String title;
        @Temporal(TemporalType.TIMESTAMP)
        private Date created;
    
        ...
    
        public Date getCreated() {
            return created;
        }
        public void setCreated(Date created) {
            this.created = created;
        }
    
        @PrePersist
        protected void onCreate() {
            created = new Date();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2011-07-22
      相关资源
      最近更新 更多