在JPA中,@Transient注解的作用是:
将实体的字段或属性标记为短暂的,表示该字段或属性不会映射到数据库表。
常见使用场景:
- 数据库表中不存在的字段,仅用于实体模型。
- 不需要持久化到数据库的字段,只在内存中使用。
- 用于计算或便利字段,值来自于其他字段计算得出。
代码示例:
@Entity
public class User {
@Id
private int id;
private String name;
@Transient
private String fullName;
public String getFullName() {
return name + " " + surname;
}
}
在上例中,fullName字段使用@Transient标记为短暂的,该字段的值来自name和surname计算得出,不需要持久化到数据库表中。
如果 removing @Transient注解,则会产生如下SQL语句:
sql
CREATE TABLE "User" (
"id" INTEGER NOT NULL,
"name" VARCHAR(255),
"fullName" VARCHAR(255),
...
)
数据库表中会包含一个无意义的fullName字段。
使用@Transient注解标记短暂字段,可以使实体模型更加清晰和直观,屏蔽那些不需要持久化的字段。在设计ORM模型时,理解何时使用@Transient注解标记字段,可以生成更加精简和规范的数据库表结构。