@MappedSuperclass 是 Java Persistence API (JPA) 中的一个注解,用于指示某个类是一个映射的超类(Mapped Superclass)。映射的超类类似于普通的 Java 类,但它不会被映射到数据库表,而是作为其他实体类的基类,用于共享字段和方法。

当你在 JPA 中定义一个实体类的时候,可以使用 @Entity 注解来标识它,这将使得该类会被映射到数据库中的表。但有时候,你可能会想要定义一些属性和方法,这些属性和方法可以被多个实体类共享,而不需要在每个实体类中都重复定义。

这时候,你可以创建一个标有 @MappedSuperclass 注解的抽象类,将这些共享的属性和方法放在其中。这些属性和方法将不会被映射到数据库表,但可以被继承自这个超类的实体类使用。

以下是一个简单的示例,展示了如何使用 @MappedSuperclass 注解:

import javax.persistence.*;

@MappedSuperclass
public abstract class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    @Column(name = "created_at")
    protected Timestamp createdAt;

    // Getter and Setter methods
}

@Entity
@Table(name = "employees")
public class Employee extends BaseEntity {
    @Column(name = "employee_name")
    private String employeeName;

    // Getter and Setter methods
}

在这个示例中,BaseEntity 是一个映射的超类,它有一个自动生成的 id 字段和一个 createdAt 字段。Employee 类继承自 BaseEntity,并且额外定义了一个 employeeName 字段。

当你使用 JPA 持久化上述代码中的 Employee 实体类时,id 和 createdAt 字段将会被映射到数据库表,而 BaseEntity 类本身并不会映射到表。

总之,@MappedSuperclass 注解允许你在 JPA 中创建一个共享属性和方法的基类,而不需要将这些属性和方法映射到数据库表中。