hibernate手动分配assigned 主键增长方式

2024-09-06 03:08

本文主要是介绍hibernate手动分配assigned 主键增长方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、手动分配数据库主键增长方式

assigned

二、还是hibernate_basemapping项目

1、新建 User.class 类

package com.bjsxt.hibernate;

 

import java.util.Date;

 

public class User3 {

   private String id;//实体是有标识的,我们最好建立一个唯一性的标识。

   private String name;

   private String password;

   private Date createTime;

   private Date expireTime;

   public String getId() {

      return id;

    }

   public void setId(String id) {

      this.id = id;

    }

   public String getName() {

      return name;

    }

   public void setName(String name) {

      this.name = name;

    }

   public String getPassword() {

      return password;

    }

   public void setPassword(String password) {

      this.password = password;

    }

   public Date getCreateTime() {

      return createTime;

    }

   public void setCreateTime(Date createTime) {

      this.createTime = createTime;

    }

   public Date getExpireTime() {

      return expireTime;

    }

   public void setExpireTime(Date expireTime) {

      this.expireTime = expireTime;

    }

   

}

 

2、User3.hbm.xml文件如下:

<?xmlversion="1.0"?>

<!DOCTYPE hibernate-mappingPUBLIC

   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

   <classname="com.bjsxt.hibernate.User3" >

      <idname="id" >

         <generatorclass="assigned"></generator>

     </id>

      <propertyname="name" unique="true" not-null="true"length="20"/>

      <propertyname="password" not-null="true"length="10"/>

      <propertyname="createTime"/>

      <propertyname="expireTime"/>

   </class>

</hibernate-mapping>

 

3、加入到hibernate.cfg.xml文件

<!DOCTYPE hibernate-configurationPUBLIC

   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

   <session-factory >

       <!-- 数据库改成hibernate_session -->

      <propertyname="hibernate.connection.url">jdbc:MySQL://localhost/hibernate_basemapping</property>

      <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

      <propertyname="hibernate.connection.username">root</property>

      <propertyname="hibernate.connection.password">root</property>

      <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

      <propertyname="hibernate.show_sql">true</property>

     

      <mappingresource="com/bjsxt/hibernate/User.hbm.xml"/>

       <mappingresource="com/bjsxt/hibernate/User2.hbm.xml"/>

       <mappingresource="com/bjsxt/hibernate/User3.hbm.xml"/>

   </session-factory>

</hibernate-configuration>

 

4、执行ExportDB.xml文件,将实体类导出表

5、assigned数据库主键增长方式,主键必须是手动分配的,如果不分配,就出错了。

testSave3()测试方法内容如下:

public void testSave3(){

      Sessionsession=null;

      try{

         session=HibernateUtils.getSession();

         session.beginTransaction();

      

         User3user3=new User3();

         

         

            user3.setId("001");

         user3.setName("米城粒");

         user3.setPassword("123");

         user3.setCreateTime(newDate());

         user3.setExpireTime(newDate());         

         

         session.save(user3);

         session.getTransaction().commit();

      }catch(Exceptione){

         e.printStackTrace();

         session.getTransaction().rollback();

      }finally{

        HibernateUtils.closeSession(session);

      }

   

        

      }

      

三、那么一般情况下,应该采用哪种主键生成策略 呢?

建议采用uuid,因为uuid是由hibernate自动生成的32位的16进制字符串,而不是由数据库生成的,所以它一定比数据库生成方式要快。

可是它也有缺点,就是查找的时候要相对慢些,因为串的查找要比数字的查找慢

 

四、readme.txt文件内容如下:

hibernate基本映射

实体类映射成表

实体类中的普通属性映射成表字段

 

采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段

(普通属性是指不包含自定义类、数组、List、集合等。

 

注意:如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名

 

实体类的设计原则:

    *实现一个默认的(即无参数的)构造方法(constructor)

    *提供一个标识属性( identifier property)可选

    *使用非final的类(可选)

        finally不能继承,不能重写,而Lazy方式,是生成一个实体类的子类的,这个子类继承了实体类,所以声明为final是不可以的。

        

    *为持久化字段声明访问器(accessors)

 

主键生成策略:

   uuid native assigned


来自http://blog.csdn.net/a5489888/article/details/6659179

这篇关于hibernate手动分配assigned 主键增长方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140826

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处