MapStruct生成代码自动给对象加1后缀的问题求助
问题原因与解决方案
为什么MapStruct生成break1而不是break?
break是Java的保留关键字,Java语法明确规定不能用关键字作为变量名、方法名、类名等标识符。如果强行编写Break break = new Break();,编译器会直接报错,因此MapStruct自动规避了这个语法冲突,生成了合法的变量名break1。
解决方案
接受自动生成的变量名:
break1是完全合法的变量名,不会影响代码功能与运行,没必要强行修改为break——因为这根本无法通过Java编译。可选:修改实体类名规避冲突:如果实在介意变量名的可读性,可以将实体类名改为非关键字,比如
BreakEntity,这样MapStruct生成的代码会使用breakEntity作为变量名,更符合常规命名习惯。修改后的实体类示例:
@Entity @Data @Table(name = "break") public class BreakEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "native") private long id; private String name; private LocalDateTime start; private LocalDateTime end; }
对应的Mapper方法也需要同步调整:
BreakEntity breakDTOtoBreakEntity(BreakDTO breakDTO);
- 重要提示:不要手动修改MapStruct自动生成的实现代码——这类文件是编译时自动维护的,手动修改后,下次编译会被重新覆盖,完全没有意义,应通过调整代码结构或配置来解决问题。
内容的提问来源于stack exchange,提问作者Vaibhav Kumar
相关产品推荐
相关产品推荐

