@Transient 注解使 JPA 忽略字段或 getter,不映射为数据库列、不参与持久化;可标在私有字段(推荐)或 getter 上,与 Java transient 关键字作用不同,仅影响 JPA 映射。

@Transient 注解的作用是告诉 JPA(如 Hibernate)忽略该字段,不将其映射为数据库表中的列,从而阻止它被持久化到数据库。
为什么 @Transient 能阻止持久化
JPA 默认会将实体类中所有非静态、非瞬态(non-transient)的字段视为需要映射的持久化属性。@Transient 显式标记某个字段“不参与持久化”,JPA 提供者在生成建表语句、执行 INSERT/UPDATE 或填充查询结果时都会跳过该字段。
@Transient 的使用位置
它可以标注在字段上,也可以标注在 getter 方法上(两者二选一即可,不要同时标,否则行为可能不一致):
- 标注在字段上(推荐):适用于字段私有、不提供 getter/setter 的场景
- 标注在 getter 方法上:适用于使用 Lombok @Getter/@Setter 或需按访问器控制映射逻辑的情况
常见注意事项
不是所有框架都默认识别 @Transient:确保你用的是标准 JPA 实现(如 Hibernate、EclipseLink),且实体类已正确启用 JPA 扫描;Spring Data JPA 自动支持该注解。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
与 transient 关键字的区别:Java 的 transient 关键字仅影响序列化(如 JSON 或 Java 序列化),对 JPA 持久化无影响;而 @Transient 是 JPA 专属,只影响数据库映射。
不能用于主键或关联字段:如果一个字段本应是 @Id、@ManyToOne 等关系映射字段,加了 @Transient 会导致映射失效甚至启动报错。
简单示例
以下字段不会出现在 user 表中,也不会被插入或查询:
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private String tempToken; // 不存库
@Transient
public String getDisplayName() { // 也不存库
return name + "-v2";
}
}

















