Hibernate的主键生成

1. hibernate的主键生成器:

   generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。

 

  1.1 程序员自己控制:assigned   数据类型不限、保存前必须赋值

 

  1.2 数据库控制: identity(标识列/自动增长) sequence(序列)   数字,无需赋值

 

  1.3 hibernate控制:increment uuid/uuid.hex  

 

  1.4 其它:native

 

2.SessionFactoryUtil类  作为HIbernate的帮助类(自己写)
 

private static SessionFactory sessionFactory;
// 存放当前会话
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
    Configuration cfg = new Configuration();
    Configuration configure = cfg.configure("hibernate.cfg.xml");
    sessionFactory = configure.buildSessionFactory();
}
/**
 * @Description: 获取session会话
 * @Param: []
 * @return: org.hibernate.Session
 * @Author: hw
 * @Date: 2018/11/20
 */
public static Session getSession() {
    Session session = threadLocal.get();
    if (null == session) {
        session = sessionFactory.openSession();
        threadLocal.set(session);
    }
    return session;
}
/**
 * @Description: 关闭资源
 * @Param: []
 * @return: void
 * @Author: hw
 * @Date: 2018/11/20
 */
public static void closeSession() {
    Session session = threadLocal.get();
    if (null != session) {
        if (session.isOpen()) {
            session.close();
        }
        threadLocal.set(null);
    }
}

在实体类的映射文件中,如果设置generator 的calss为increment则为自动增长

uuid则为生成随机数  assigned   为程序员输入   在企业开发中主键一般设置为varchar,

生成规则:小项目用uuid  大项目用  公司名_模块名_时间戳   

为了防止重复也可以用uui加上系统当前时间
 

<id name="sid" type="java.lang.Integer" column="sid">
    <generator class="increment" />
</id>

自动生成主键类

public class HibernateId implements IdentifierGenerator {
    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object o) throws HibernateException {
        AbstractEntityPersister persister = (AbstractEntityPersister) session.getFactory().getClassMetadata(o.getClass());
        //persister.getTableName()获取表名   后面是系统当前时间
        return persister.getTableName() + new SimpleDateFormat("YYYY-MM-DD HH:MM:SS").format(new Date());
    }
}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值