Files
contract-manager/.trae/rules/entity_rules.md
songqq c4eec0a9dd refactor(model): 重构模型类包结构并优化序列化处理
重构模型类包结构,将模型类按功能模块划分到不同的子包中。优化序列化处理,为VO类添加serialVersionUID并实现Serializable接口。移除部分冗余的serialVersionUID字段,简化模型类代码。同时修复UITools中空值处理的问题,并更新pom版本至0.0.100-SNAPSHOT。

- 将模型类按功能模块划分到ds子包中
- 为VO类添加序列化支持
- 移除冗余的serialVersionUID字段
- 修复UITools空值处理问题
- 更新项目版本号
2025-10-09 18:27:48 +08:00

3.4 KiB
Raw Blame History

实体类规则

1. 目录结构

  • 实体类统一放置在 common/src/main/java/com/ecep/contract/model/ 目录下
  • 按业务领域组织,不使用子目录

2. 命名规范

  • 类名:使用驼峰命名法,首字母大写,如 Contract.javaCompany.java
  • 表名:通常与类名对应,使用大写字母和下划线,如 CONTRACTCOMPANY
  • 字段名:使用小写字母和驼峰命名法,对应数据库中使用大写字母和下划线的列名

3. 继承与接口实现

  • 实体类通常实现以下接口:
    • IdentityEntity提供主键ID的getter/setter及equals方法实现
    • BasedEntity提供toPrettyString()方法
    • NamedEntity提供name属性的getter/setter适用于有名称的实体
    • Voable<T>提供toVo()方法用于将实体转换为对应的VO对象
    • 特定领域接口:如 CompanyBasedEntityContractBasedEntityProjectBasedEntity

4. 注解规范

  • JPA注解
    • @Entity:标记为实体类
    • @Table(name = "表名", schema = "数据库名"):指定对应的数据库表和数据库
    • @Id:标记主键字段
    • @GeneratedValue(strategy = GenerationType.IDENTITY):指定主键生成策略
    • @Column(name = "列名", nullable = false, length = 长度):指定字段对应的数据库列属性
    • @ManyToOne(fetch = FetchType.LAZY)指定多对一关系通常使用LAZY加载
    • @JoinColumn(name = "外键列名"):指定外键列
    • @Enumerated(EnumType.ORDINAL):指定枚举类型的存储方式
    • @Lob:指定大对象类型
    • @Version:指定乐观锁版本字段
  • Lombok注解
    • @Getter生成getter方法
    • @Setter生成setter方法
    • @ToString生成toString方法复杂关联对象可使用@ToString.Exclude排除

5. 字段规范

  • 主键字段:
    • 类型:Integer
    • 命名:id
    • 注解:@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
  • 其他字段:
    • 基本类型使用Java包装类型IntegerBoolean)而不是原始类型
    • 时间类型:使用java.time.LocalDatejava.time.LocalDateTime
    • 布尔类型:使用booleanBoolean,对应数据库中的BITBOOLEAN类型
    • 关联关系:使用@ManyToOne@OneToMany等注解定义

6. 方法规范

  • equals方法:通常使用HibernateProxyUtils工具类处理代理对象的比较
  • hashCode方法:通常使用HibernateProxyUtils.hashCode(this)实现
  • toVo方法:实现Voable接口将实体转换为对应的VO对象
  • toString方法通常使用Lombok的@ToString注解生成

7. 注释规范

  • 类注释使用JavaDoc格式描述实体类的用途
  • 字段注释使用JavaDoc格式描述字段的含义、数据来源、取值范围等
  • 对于特殊字段,可包含详细的说明表格或示例

8. 序列化规范

  • 重要:实体类不包含Serializable接口和serialVersionUID字段
  • 序列化相关功能由对应的VO类实现

9. 最佳实践

  • 实体类应保持简洁,只包含数据和基本的数据访问方法
  • 业务逻辑应在服务层实现
  • 复杂的查询逻辑应在Repository层或通过Specification实现
  • 避免在实体类中使用复杂的计算逻辑
  • 对于多对多关系,建议使用中间表和两个一对多关系实现
  • 关联关系应使用懒加载LAZY以提高性能