开心一笑: 会买水果的狗狗

    关注微信公众号

    QQ群:831045818

    app下载

    当前位置:首页> java > 技术文档 > 正文
    jpa 主键生成策略
    发布时间:2021-11-17 10:49:17.0 浏览次数:


    取值说明
    GenerationType.TABLE使用一个特定的数据库表格来保存主键
    GenerationType.SEQUENCE根据底层数据库的序列来生成主键,条件是数据库支持序列
    GenerationType.IDENTITY主键由数据库自动生成(主要是自动增长型)mysql用
    GenerationType.AUTO主键由程序控制,mysql会生成表


    //给定ID方式,id存在给指定 ,不存在由数据库自增
    package com.admin.dao;
    
    import org.hibernate.MappingException;
    import org.hibernate.engine.spi.SharedSessionContractImplementor;
    import org.hibernate.id.IdentityGenerator;
    import java.io.Serializable;
    
    public class IDGenerator extends IdentityGenerator {
        @Override
         public Serializable generate(SharedSessionContractImplementor session, Object object) throws MappingException {
         //取值
            Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);
             if (id != null) {
                    return (Serializable) id;
             }
            return super.generate(session, object);
        }
    }
    
    
    //自定义的字符型ID
    package com.admin.dao;
    import org.hibernate.MappingException;
    import org.hibernate.engine.spi.SessionImplementor;
    import org.hibernate.id.UUIDGenerator;
    import java.io.Serializable;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class IDGenerator extends UUIDGenerator {
    
        @Override
        public Serializable generate(SessionImplementor session, Object object) throws MappingException {
    
            SimpleDateFormat simpleDateFormat;
            simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            Date date = new Date();
            String str = simpleDateFormat.format(date);       
            return   str;// 当前时间
        }
    }
    
    
    //调用方式,注 generatorid  name 要统一ID
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY,generator="id")
    @GenericGenerator(name = "id",strategy = "com.admin.dao.IDGenerator")
    private Integer id;
    
    注字符型ID 与 long ID 继承对象不同
    其实GeneratedValue 不需要,ID则必须给定,与方案2功能相同


    关注"都市百货" 了解南陵

    微信咨询wanglf2r(不拉群 发广告者勿加)

    0
    0
    上一篇:南陵芜黄高速12月份正式通车 上一篇:南陵中学举办第三十八届田径运动会

    评论已有0

    提交评论

    热门评论

    南陵新闻
    公示公告
    常用查询
    风光南陵
    走出南陵
    友情链接