@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 中创建一个共享属性和方法的基类,而不需要将这些属性和方法映射到数据库表中。