Mapstruct对象插入数据库某个字段总是为空或者赋值失败

本文讲述了在使用MapStruct进行对象映射时遇到的赋值失败问题,原因是源对象缺少get方法或目标对象缺少set方法。解决方案包括使用Lombok注解或自定义set/get方法,对于add开头的字段,作者采取了禁用的粗暴方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述

使用mapstruct进行对象间赋值时出现了赋值失败的情况,即赋值后新对象里面的所有属性都是空值,点击查看class反编译的代码后发现没有调用set方法

2、问题分析

1、因为mapstruct的原理是通过调用get方法获取源对象的值,再调用set方法赋值给目标对象(如图),所以源对象需要有get方法,目标对象需要有set方法。检查发现是目标对象没有写set方法也没有使用lombok的@Data注解

3、解决方案

1、使用lombok的@Data注解或者@Setter和@Getter注解

2、手动编写set和get方法

4、典型问题

如果字段是add开头命名的字段,那么就无法赋值,

比如:addNum,如果字段是这样的,那么就总是null

解决方法:我用最粗暴的方法,直接不用这个了

### SQL 中 `timestamp` 字段类型的使用说明和特性 #### 定义与作用 `timestamp` 数据类型用于记录数据库范围内唯一的二进制字符串,而是人类可读的时间戳。每当插入或更新一行时,该行的 `timestamp` 列会自动更新为其新的唯一值[^1]。 #### 唯一性和自动生成 一个表中仅能定义一个 `timestamp` 列,并且此列通常需要手动赋值;其默认行为是在每次对该行执行插入或更新操作时由系统自动生成并维护新值。这使得它非常适合用于跟踪行版本控制或检测并发冲突的情况。 #### 同于 DATETIME 类型 需要注意的是,在多个关系型数据库管理系统 (RDBMS) 如 MySQL 和 SQL Server 中,虽然都存在名为 `TIMESTAMP` 的数据类型,但是它们之间存在着差异: - **MySQL**: 在早期版本中,`TIMESTAMP` 存储的是 UTC 时间,并占用四个字节的间直到 2038 年之前有效[^4]; - **SQL Server**: 这里的 `TIMESTAMP` 实际上对应着 ROWVERSION 关键字,表示逻辑上的时间戳而非实际日期时间信息[^2]。 因此,在同 RDBMS 上实现相同功能时应当注意这些区别。 #### Hive SQL 示例 下面是一个在Hive中创建包含 `timestamp` 字段表格的例子: ```sql CREATE TABLE IF NOT EXISTS employee ( id BIGINT, username STRING, age TINYINT, weight DECIMAL(10, 2), create_time TIMESTAMP, is_test BOOLEAN, tags ARRAY<STRING>, ext MAP<STRING, STRING> COMMENT '扩展字段', address STRUCT<street:STRING, city:STRING> ) COMMENT '员工表' ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值