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

相关文章

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录