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

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室