• JPA字段映射(uuid,日期,枚举,@Lob)


    主键

    JPA主键的生成策略不像Hibernate那么丰富。

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @GeneratedValue的属性strategy指定生成策略,

    IDENTITY(自增长方式,如mysql)

    SEQUENCE  (序列方式,如oracle)

    TABLE (表方式,该方式便于数据库移植,但效率不高,主键的值是从这个表中取得的。)

    AUTO (自动方式,该方式会把主键生成交给JPA的实现者来决定,Hibernate会根据底层数据库选择合适的方式,如果用这种方式,可以不写,默认如此)

    使用Hibernate提供的uuid方式(用于分布式应用,根据ip地址,JVM启动时间,系统时间和一个计数器值(在当前的JVM中惟一)产生32位长度的字符串)

    @Entity
    @GenericGenerator(name="uuid_s",strategy="uuid")
    public class Person implements java.io.Serializable{
       
        @Id
        @GeneratedValue(generator="uuid_s") @Column(length=32)
        private String id; //必须Sring

    //…
        }

    oracle测试结果:

    SQL> desc person;
    名称                                      是否为空? 类型
    ----------------------------------------- -------- ---------------------------

    ID                                        NOT NULL VARCHAR2(32 CHAR)
    BIRTH                                              TIMESTAMP(6)
    GENDER                                             NUMBER(10)
    NAME                                      NOT NULL VARCHAR2(10 CHAR)

    SQL> select * from person;

    ID
    -------------------------------------------------------------------------------

    BIRTH
    ---------------------------------------------------------------------------
        GENDER NAME
    ---------- --------------------
    8a8a4dcf349eac5901349eac5d910001
    02-1月 -12 09.47.03.339000 下午
             0 tazi

    字符串类型:不指定长度时,数据库中长度为255,mysql中映射为varchar(255)

    日期类型:

    可以直接使用java.util.Date

    2011-12-12 在hibernate配置文件中可以用type=”date”

    2011-12-12 12:23:12 可以用type=”datestam”(?)

    12:23:12可以用type=”time”

    在JPA注解方式可以用

    @Temporal(TemporalType.DATE)    //还有TIME,TIMESTAMP
        private Date birth;

    枚举类型:

    男和女可以用枚举作为实体Bean的属性值类型,那么枚举值保存到数据库后使用枚举值使用索引值(0开始)还是字符值呢。注意保存枚举值时加上非空约束,最好加上长度。

    面向对象的方式考虑问题,怎样设置默认值,直接在类的属性里设值。

    package com.domin;

    public enum Gender {
        MAN,WOMAN
    }

    @Enumerated(EnumType.STRING) @Column(length=5,nullable=true) //ORDINAL为索引方式
        private Gender gender=Gender.MAN;//设置默认值

    大数据字段映射

    (1)可以在字符型的属性或字段上加上@Lob

    @Lob
        private String description;
      在mysql中映射产生的字段的类型是longtext

    在oracle中是  CLOB

    (2)可以在Byte[]类型的字段上加@Lob

    mysql中对应longblob

    oracle中不能使用byte[]字段加@Lob的方式直接映射

    大数据字段最好再加上延迟加载

    @Lob @Basic(fetch=FetchType.LAZY)
        private Byte[] file;

  • 相关阅读:
    文件上传利用总结
    通过WebGoat学习java反序列化漏洞
    C# Bat批处理文件创建、执行
    C# 删除目录下所有文件
    是时候做一点属于自己的东西了
    2021.09.26省市县三级联动最新数据库,附脚本
    SpringBoot 整合Easy Poi 下载Excel(标题带批注)、导出Excel(带图片)、导入Excel(校验参数,批注导出),附案例源码
    NeRF 核心思想简记
    R-CNN系列核心思想简单记录
    HeapDump性能社区Young GC异常问题排查实战案例精选合集
  • 原文地址:https://www.cnblogs.com/tazi/p/2311588.html
Copyright © 2020-2023  润新知