• 【JPA】映射


    【JPA】映射

    转载:https://www.cnblogs.com/yangchongxing/p/10120447.html

    1、@Entity注解
    指定实体类

    2、@Id注解
    指定实体主键

    3、@Table注解
    指定表名,@Table(name="employee")
    指定架构,@Table(name="employee", schema="HR")
    指定目录,@Table(name="employee", catalog="HR")

    4、@Column注解
    列映射
    @Column(name="phone")

    5、@Basic(fetch=FetchType.LAZY)注解

    延时加载

    6、@Lob注解
    大型对象
    CLOB大型的字符序列char[]、Character[]和String
    BLOB大型的字节序列byte[]、Byte[]和Serializable

    7、@Lob注解
    private byte[] picture

    8、@Enumerated注解
    枚举类型

    package cn.ycx.constant;
    
    public enum Sex {
        MALE,
        FEMALEL
    }

    数据库定义为整数类型,将序号存到数据库字段

    private Sex sex;

    如果给现有的枚举类型中插入新值,会导致原来的序号错误,无法使用。

    一个好的解决方案是将值的名称存储为字符串,以代替序号存储,把数据库定义为字符类型,将值的名称存储到数据库字段。

    @Enumerated(EnumType.STRING)
    private Sex sex;

    9、时间类型

     @Temporal注解指定JDBC类型,有三个枚举类型DATE、TIME、TIMESTAMP

    @Temporal(TemporalType.DATE)
    @Column(name="start_date")
    private Date startDate;
    
    @Temporal(TemporalType.TIME)
    @Column(name="start_time")
    private Date startTime;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="start_timestamp")
    private Date startTimestamp;

     10、标识符生成

    使用数据库表

    生成标识符的最灵活和可移植的方式是使用一个数据库表。

    ID生成表应该有两列,第一列是字符类型,用来表示特定的生成器序列。第二列是整数类型,用来表示第一列对应的生成器值。

    示例

    @TableGenerator(name="employee",table="id_generator",pkColumnName="name",valueColumnName="value",initialValue=10,allocationSize=5)
    @Id @GeneratedValue(strategy=GenerationType.TABLE,generator="employee")
    private int id;

    @TableGenerator 表生成
    name:全局生成器名称
    table:数据库表名称
    pkColumnName:生成器的列的名称
    valueColumnName::生成器的值列的名称
    initialValue:表示最后分配的标识符,可作为生成器定义的一部分进行指定,但是默认设置成0将足以满足几乎每种情况。此设置仅仅在创建表的架构生成期间使用。在随后的执行中,程序将读取值列的内容以确定下一个生成的标识符。
    allocationSize:表示分配大小,为了避免每次请求标识符时都更新行,所以预先分配一批标识符,然后请求时从内存中生成标识符,直到这批标识符用完。下一个对标识符的请求将触发预先分配另一批标识符,同时标识符值根据分配大小递增。

    @GeneratedValue
    strategy:指定策略为表生成
    generator:引用生成器名称

    使用数据库序列

    不关心特定序列,仅仅指定生成器的类型就足够了,没有命名任何生成器,因此提供程序将使用他自己选择的一个默认序列对象。

    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private int id;

    指定命名序列,注意序列要创建好。

    @SequenceGenerator(name="employee",sequenceName="employee")
    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="employee")
    private int id;

    使用数据库标识

    当底层数据库支持主键标识才可以。

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
  • 相关阅读:
    《简养脑》读书笔记
    如何用86天考上研究生
    Improving your submission -- Kaggle Competitions
    Getting started with Kaggle -- Kaggle Competitions
    入门机器学习
    《世界因你不同》读书笔记
    [转载]Python 包构建教程
    [转载] Pytorch拓展进阶(二):Pytorch结合C++以及Cuda拓展
    集合不能存放重复元素
    在jupyter notebook中绘制KITTI三维散点图
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/10120447.html
Copyright © 2020-2023  润新知