You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助实体映射器在Cassandra列中写入节点生成的当前时间戳

如何通过Cassandra实体映射器让字段使用totimestamp(now())生成时间戳

我们通过实体映射器将Cassandra表映射为Java对象,实体类如下:

class Activity
{
   @PrimaryKey
   int id;
   @Column
   Date modifiedDate;
   @Column
   String activityDesc;
}

希望modifiedDate字段由Cassandra节点通过totimestamp(now())函数生成当前时间戳,且不想使用纯CQL插入语句,仅通过映射器方法实现。已知@Computed注解仅支持查询操作,无法用于插入场景。

下面是几种可行的解决方法:

  • 自定义映射器插入方法
    在你的映射器接口里定义带@Query注解的保存方法,既保留实体映射的便捷性,又指定modifiedDate用Cassandra函数生成:

    @Mapper
    public interface ActivityMapper {
        @Query("INSERT INTO activity (id, modifiedDate, activityDesc) VALUES (:id, totimestamp(now()), :activityDesc)")
        void save(Activity activity);
    }
    

    调用这个方法时,映射器会自动把Activity对象的id和activityDesc字段值填入语句,同时让Cassandra生成时间戳。

  • 给Cassandra表字段设置默认值(推荐)
    直接在Cassandra表结构中给modifiedDate设置默认值:

    ALTER TABLE activity ALTER modifiedDate SET DEFAULT totimestamp(now());
    

    之后插入数据时,把Java实体的modifiedDate设为null,映射器会自动跳过这个字段,Cassandra会用默认值自动填充。如果需要更新时也刷新时间戳,同样可以在更新方法的自定义查询里指定modifiedDate = totimestamp(now())。

  • 不推荐:客户端生成时间
    有些ORM框架支持实体生命周期监听器,能在插入前给字段赋值,但这是在客户端生成时间,不符合你要Cassandra节点生成的需求,所以不建议用。

内容的提问来源于stack exchange,提问作者Deepu--Java

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:11