当前位置: 首页 > 面试题库 >

使用休眠JPA注释来设置自动生成时间的困难时间

林英武
2023-03-14
问题内容

多亏了你们,我对hibernate的了解大大提高了。现在我在这里碰到有关current_timestamp的问题。这是我的密码

@Column(name="DATE_CREATED", insertable=false, updatable=false, columnDefinition="timestamp default current_timestamp")
@org.hibernate.annotations.Generated(value=GenerationTime.INSERT)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dateCreated;

@Column(name="LAST_MODIFIED", insertable=false, updatable=false, columnDefinition="datetime")
@org.hibernate.annotations.Generated(value=GenerationTime.ALWAYS)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date lastModified;

我希望date_created获得current_timestamp,并且我希望lastmodified为每次更新插入时间。显然我不能在同一张表上有2个current_timestamp字段。还有其他方法可以实现吗?谢谢阅读


问题答案:

这与Hibernate本身无关。上面指定的注释告诉Hibernate这些值将由数据库生成,因此在插入/更新实体后需要重新加载这些值。

如果这是您要使用的方式,则需要配置数据库(例如,通过创建触发器)以根据需要填充date_created/ last_modified列。

另一种方法是不将这些字段标记为已生成,而是在Java代码中更新它们。如果您正在使用JPA(通过Hibernate
EntityManager),则通过@PrePersist /
@PreUpdate
回调方法执行此操作很简单:

@PreUpdate
@PrePersist
public void updateTimeStamps() {
    lastModified = new Date();
    if (dateCreated==null) {
      dateCreated = new Date();
    }
}


 类似资料:
  • 问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部门 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所

  • 问题内容: 我有一个使用hibernate 3.1和JPA批注的应用程序。它有一些带有byte []属性的对象(大小为1k-200k)。它使用JPA @Lob批注,并且hibernate 3.1可以在所有主要数据库上读取它们,这似乎隐藏了JDBC Blob供应商的特性(应该这样做)。 当我们发现hibernate3.5 破坏了(并且不会修复) postgresql中的这个注释组合时(没有解决方法)

  • 问题内容: 我正在尝试设计款待应用程序。我有两个表,分别为和。用户可以是或可以互相发送主机请求。但是无需将“用户”定义为访客或主机,这对于系统来说并不重要,因此我没有针对他们的单独表。这种差异在Request表中非常重要,并且需要保留和作为外键(由于Host和visitor也是User,因此与User表的主键列对应)。 我的问题是如何在hibernate状态下定义此关系?我的意思是,请求表中应该有

  • 问题内容: 什么和何时在休眠状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6 要了解

  • 问题内容: 是否可以在运行时关闭每个类的某些约束/注释?例如,如果我想对一个字段进行检查,那可能吗? 这将使测试更容易查看某个约束是否正确正确触发,因为我可以关闭所有其他约束,而只需检查一个约束即可。 问题答案: 是否可以在运行时关闭每个类的某些约束/注释?例如,如果我想对firstName字段进行@NotNull检查,那可能吗? 不它不是。Bean验证未定义此类功能。Hibernate Vali

  • 问题内容: 嗨,我编写了这样的代码 但是我从DAO手动设置了它,例如“ e.setUserID(01);”。否则将不插入行是否有任何过程来获取ID值并检索自动生成的值。我想我会得到一些帮助 问题答案: 采用