zoukankan      html  css  js  c++  java
  • JPA字段映射(uuid,日期,枚举,@Lob)

    转:http://www.cnblogs.com/tazi/archive/2012/01/04/2311588.html

    主键

    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

    日期类型:

    可以直接使用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;//设置默认值

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

    mysql中对应longblob

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

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

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

  • 相关阅读:
    Graceful degradation versus progressive enhancement
    表现与数据分离
    避免写出IE Bug
    js控制元素的显示与隐藏
    EntityManager方法简介
    JPA EntityManager详解(一)
    Springmvc中 同步/异步请求参数的传递以及数据的返回
    JPA详解
    单向关系中的JoinColumn
    Hibernate一对多和多对一关系详解 (转载)
  • 原文地址:https://www.cnblogs.com/guxingzhe/p/5286445.html
Copyright © 2011-2022 走看看