hibernate jpa

楼主认为,hibernate 的 jpa 是使用 Class 和 table 的映射关系,在数据库中创建 table 的一种功能。

1、一些基础的注解

@Entity

实体注解,使用这个注解并配置 hibernate 扫描包后,不需要写 xml 映射文件,一般写在 model class 上。

@Table
  • name 使用哪张表(table name)
  • catalog 使用哪个database
  • index 指定索引
  • scheme 指定scheme
  • uniqueConstraints 表上的唯一约束(保证是唯一的,没有重复的) demo:
    1
    2
    3
    4
    5
    Entity  //实体的注解
    @Table(name = "T_PERSON", //表名
    catalog = "jpa", //数据库
    schema = "",
    uniqueConstraints = { @UniqueConstraint(columnNames = { "id" }) }) //唯一约束
    @Id
    指定主键
    @GeneratedValue
  • strategy 主键生成策略,有AUTO、INDENTITY、SEQUENCE 、 TABLE 4种

TABLE:使用一个特定的数据库表格来保存主键。 (适用于跨不同数据库平台,了解即可) SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 (适用于oracle数据库) IDENTITY:主键由数据库自动生成(主要是自动增长型) (适用于mysql等数据库) AUTO:主键由程序控制。

  • generator 主键生成器,这个要结合 @SequenceGenerator 或 @TableGenerator使用 demo:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Id //指定主键
    @SequenceGenerator(name = "id_seq", sequenceName = "person_id_seq")
    @GeneratedValue(strategy = GenerationType.IDENTITY,
    generator="id_seq")
    //strategy主键生成策略,有
    //TABLE:使用一个特定的数据库表格来保存主键。 (适用于跨不同数据库平台,了解即可)
    //SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 (适用于oracle数据库)
    //IDENTITY:主键由数据库自动生成(主要是自动增长型) (适用于mysql等数据库)
    //AUTO:主键由程序控制。
    private int id;
    @SequenceGenerator
  • name name属性是必传参数
  • allocationSize 序列号增量
  • initialValue 初始值,不能小于1
  • schema
  • sequenceName demo:
    1
    2
    3
    4
    5
    6
    @SequenceGenerator(name = "id_seq", 
    sequenceName = "person_id_seq",
    allocationSize = 2,
    initialValue = 3,
    schema = "",
    catalog = "jpa")
    @Column
  • columnDefinition 建表时插入的sql片段
  • insertable hibernate insert 语句是否包含此字段,默认为true
  • length 长度
  • name
  • nullable 是否可以为空
  • precision 位数(十进制),貌似在postgresql中不起作用
  • scale 小数位数(十进制),貌似在postgresql中不起作用
  • table
  • unique 是否唯一
  • updatable hibernate update 语句是否包含此字段,默认为true

project url:https://github.com/Knight-JNXU/JavaFundation/tree/HibernateJpa 未完待续

|