@MappedSuperclass 是类级别注解,该注解没有任何参数,被该注解标注的类不会映射到数据库中单独的表,但该类所拥有的属性都将映射到其子类的数据库表的列中。

1. 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(name = "create_time")
protected Date createTime;
// getters and setters
}
1
2
3
4
5
6
7
8
9
10
@Entity(name = "person")
public class Person extends BaseEntity implements Serializable {
private String name;
private String mail;
// getters and setters
}

产生的 DDL 语句(MySQL):

1
2
3
4
5
6
7
CREATE TABLE `person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. @AttributeOverride

对于被 @MappedSuperclass 注解标注的类派生出来的子类,可以使用 @AttributeOverride 注解重新定义以覆盖父类中的映射信息。

参数 类型 描述
name String 属性名称
column Column 列信息
1
2
3
4
5
6
7
8
9
10
11
@Entity(name = "person")
@AttributeOverride(name = "createTime", column = @Column(name = "create_date"))
public class Person extends BaseEntity implements Serializable {
private String name;
private String mail;
// getters and setters
}

产生的 DDL 语句(MySQL):

1
2
3
4
5
6
7
CREATE TABLE `person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. @AttributeOverrides

如果需要重新定义父类中的多个映射信息,需要使用 @AttributeOverrides 注解。

参数 类型 描述
value AttributeOverride[] @AttributeOverride 注解列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity(name = "person")
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "person_id")),
@AttributeOverride(name = "createTime", column = @Column(name = "create_date"))
})
public class Person extends BaseEntity implements Serializable {
private String name;
private String mail;
// getters and setters
}

产生的 DDL 语句(MySQL):

1
2
3
4
5
6
7
CREATE TABLE `person` (
`person_id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`person_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;