JPA中的@Transient注解的作用是什么?代码举例讲解

在JPA中,@Transient注解的作用是:
将实体的字段或属性标记为短暂的,表示该字段或属性不会映射到数据库表。

常见使用场景:

  1. 数据库表中不存在的字段,仅用于实体模型。
  2. 不需要持久化到数据库的字段,只在内存中使用。
  3. 用于计算或便利字段,值来自于其他字段计算得出。

代码示例:

@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注解标记字段,可以生成更加精简和规范的数据库表结构。