java - 如何使用 hibernate 映射插入当前时间戳?

标签 java database hibernate orm hibernate-mapping

我的文件有字段-

<property name="createdTs" type="timestamp">
    <column name="created_ts" length="29" />
</property>

当我用 - 保存表格时

public void persist(DrRequest transientInstance) {
        log.debug("persisting DrRequest instance");

        try {

            Transaction trans=sessionFactory.getCurrentSession().beginTransaction();
            sessionFactory.getCurrentSession().persist(transientInstance);
            trans.commit();
            log.debug("persist successful");
        } catch (RuntimeException re) {
            log.error("persist failed", re);
            throw re;
        }

它不会在 postgresql 数据库表中保存包含当前时间的 created_ts 字段。

created_ts 的类型是timestamp without time zone

最佳答案

如果您使用 hibernate.hbm2ddl.auto 生成数据库架构,您需要指示 Hibernate 包含默认的“CURRENT_TIMESTAMP”指令:

<column  name="created_ts" length="29" sql-type="timestamp without time zone" default="CURRENT_TIMESTAMP"/>

如果您有一个现有架构,则需要更改它以为此时间戳列添加默认值。

Hibernate 不会知道数据库生成的值,因此您需要在持久化实体并刷新 Hibernate session 后刷新实体:

session.flush();
session.refresh(transientInstance);

这样您就可以重新加载实体并获取数据库生成的值。

关于java - 如何使用 hibernate 映射插入当前时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083833/

相关文章:

java - 将字符串编码为 Latin-1 时如何最小化问号?

java - 对应的then子句没有正常完成

java - 设计 GUI 的重要提示?

java - 使用扫描仪打印标记和分隔符值

java - 甲骨文/JDBC : retrieving TIMESTAMP WITH TIME ZONE value in ISO 8601 format

java - Hibernate @Formula 减法和加法

c# - 数据库设置不正确,IList 上的值为空

database - 使用 Neo4j 执行任意查询

java - Hibernate/JPA 将 native 查询的结果映射到持有实体的非实体

java - 如何针对不同类型的CRUD操作实现Hibernate拦截器并获取已修改的java对象的类名?