05-二次开发教程-Entity-v8

2018-03-15 10:37 阅读

Entity是基于JPA规范。更详细的技术细节请参考JPA或Hibernate文档。

配置文件

com.jspxcms.plug.ContextConfig@EntityScan({ "com.jspxcms.plug.domain" })会自动扫描该包下含有@Entity注解的类。

数据库表

不使用主键自增策略,而是使用JPA的TABLE主键生成策略,将主键放到数据库中的一个表里,这个表在Hibernate里默认为Hibernate_sequences。所以在建表的时候不要使用主键自增。

create table plug_resume
(
   f_resume_id          int not null,
   f_site_id            int not null,
   f_name               varchar(100) not null comment '姓名',
   f_post               varchar(100) not null comment '应聘职位',
   f_creation_date      datetime not null comment '投递日期',
   f_gender             char(1) not null default 'M' comment '性别',
   f_birth_date         datetime comment '出生日期',
   f_mobile             varchar(100) comment '手机',
   f_email              varchar(100) comment '邮箱',
   f_expected_salary    int comment '期望薪水',
   f_education_experience longtext comment '教育经历',
   f_work_experience    longtext comment '工作经历',
   f_remark             longtext comment '备注',
   primary key (f_resume_id)
)
engine = innodb;
alter table plug_resume comment '简历表';
alter table plug_resume add constraint fk_plug_resume_site foreign key (f_site_id)
      references cms_site (f_site_id) on delete restrict on update restrict;

实体类

使用JPA的TABLE主键生成策略。

需注意以下三个值:name = "tg_plug_resume", pkColumnValue = "plug_resume" generator = "tg_plug_resume",其中plug_resume为表名,如果表名为abc,则这三个值分别为name = "tg_abc", pkColumnValue = "abc" generator = "tg_abc"

initialValue = 1代表主键从1开始。allocationSize = 10代表hibernate一次获取10个主键值,如果没有用完系统就重启了,那么在数据库中会出现主键不连续的情况。但由于获取主键值要查询并修改数据库,对于频繁插入数据的表来说,是一个很大的开销,所以可以根据情况适当调整这个值。

如果使用MySQL的主键自增,除了在表主键里增加主键自增属性,在Entity里的ID注解也要改为@GeneratedValue( generation = IDENTITY )@GeneratedValue( generation = AUTO )

package com.jspxcms.plug.domain;

@Entity
@Table(name = "plug_resume")
public class Resume implements java.io.Serializable {
    private Integer id;
    ……

  @Id
    @Column(name = "f_resume_id", unique = true, nullable = false)
    @TableGenerator(name = "tg_plug_resume", pkColumnValue = "plug_resume", initialValue = 1, allocationSize = 10)
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_plug_resume")
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    ……
}
咨询
交流群
电话