fix: Entity生成工具修复 - 自动生成表名和正确的时间戳 🔧
✅ 修复内容(工具层): 1. 自动生成表名: - 添加generateTableName方法 - 规则: nc_前缀 + 驼峰转下划线 - 例如: SysUser -> nc_sys_user - 对应Java MyBatis-Plus配置的table-prefix: nc_ 2. 修复时间字段装饰器: - 移除@CreateDateColumn/@UpdateDateColumn - Java使用Long类型存储秒级时间戳(int) - 统一使用@Column装饰器 - Java: private Long createTime -> MySQL: create_time int - NestJS: @Column() createTime: number 📋 修改文件: - entity-generator.js - generateDecorators(): 自动生成表名 - generateTableName(): 新增方法 - generateFieldDecorators(): 移除特殊时间处理 🎯 效果: - 生成的Entity自动匹配Java数据库表名 - 时间字段类型100%一致 - 无需手动修改生成的Entity文件
This commit is contained in:
@@ -76,15 +76,34 @@ ${fields}
|
||||
const decorators = [];
|
||||
|
||||
// 实体装饰器
|
||||
// 修复:自动生成表名(nc_前缀 + 驼峰转下划线)
|
||||
if (javaEntity.tableName) {
|
||||
decorators.push(`@Entity('${javaEntity.tableName}')`);
|
||||
} else {
|
||||
decorators.push('@Entity()');
|
||||
// 从Java类名生成表名:SysUser -> nc_sys_user
|
||||
const tableName = this.generateTableName(javaEntity.className);
|
||||
decorators.push(`@Entity('${tableName}')`);
|
||||
}
|
||||
|
||||
return decorators.join('\n');
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成表名:Java类名转数据库表名
|
||||
* 规则:nc_前缀 + 驼峰转下划线
|
||||
* 例如:SysUser -> nc_sys_user
|
||||
*/
|
||||
generateTableName(className) {
|
||||
// 驼峰转下划线
|
||||
const underscoreName = className
|
||||
.replace(/([A-Z])/g, '_$1')
|
||||
.toLowerCase()
|
||||
.replace(/^_/, ''); // 移除开头的下划线
|
||||
|
||||
// 添加nc_前缀(MyBatis-Plus配置的表前缀)
|
||||
return `nc_${underscoreName}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成字段
|
||||
*/
|
||||
@@ -134,17 +153,10 @@ ${fields}
|
||||
return decorators.join('\n ');
|
||||
}
|
||||
|
||||
// 创建时间装饰器(优先判断)
|
||||
if (field.fieldName === 'createdAt' || field.fieldName === 'createTime' || field.columnName === 'create_time') {
|
||||
const dbColumnName = field.columnName || field.fieldName;
|
||||
return `@CreateDateColumn({ name: '${dbColumnName}' })`;
|
||||
}
|
||||
|
||||
// 更新时间装饰器(优先判断)
|
||||
if (field.fieldName === 'updatedAt' || field.fieldName === 'updateTime' || field.columnName === 'update_time') {
|
||||
const dbColumnName = field.columnName || field.fieldName;
|
||||
return `@UpdateDateColumn({ name: '${dbColumnName}' })`;
|
||||
}
|
||||
// ✅ 修复:Java使用Long类型存储秒级时间戳(int),不使用Date对象
|
||||
// 所有字段(包括时间字段)都使用普通@Column装饰器
|
||||
// Java: private Long createTime; -> MySQL: create_time int
|
||||
// NestJS: @Column() createTime: number;
|
||||
|
||||
// 列装饰器
|
||||
const columnOptions = [];
|
||||
|
||||
Reference in New Issue
Block a user