1.新建register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <body>
<form action="save.action">
username:<input type="text" name="username"><br>
password:<input type="text" name="password"><br>
<input type="submit" value="submit">
</form>
</body>
</html>

2.新建listAll.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript"> function del()
{
if(confirm("are you sure"))
{
return true;
}
return false;
}
</script>
</head> <body>
<table width="80%" align="center" border="1">
<tr>
<th>username</th> <th>password</th> <th>delete</th> </tr> <s:iterator value="#request.list" id="user">
<tr>
<td><s:a href="getUser.action?username=%{#user.username}"> <s:property
value="user.username" /></s:a></td> <td><s:a href="getUser.action?username=%{#user.username}"></s:a> <s:property
value="user.password" /></td> <td><s:a href="deleteUser.action?username=%{#user.username}"
onclick="return del()">delete</s:a></td>
</tr> </s:iterator> </table>
</body>
</html>

3.运行后查看控制台会有错误信息显示:

出现了增加用户出现异常,这段代码在UserAction.java中:

说明session.save()没有执行成功,插入数据不成功有几种可能呢,无非是字段类型有错误,主键出现问题,那么我们来看看一看我们的主键就会发现问题:

不知道同学们对前两节的内容有没有什么质疑?那就是主键,我们之前设定主键的生成方式为increment也就是自增方式,什么是increment方式?

对 long , short 或 int 的数据列生成自动增长主键。increment主键生成方式的特点是与底层数据库无关性,大部分数据库如 Mysql,MSSQL 和ORACLE等都支持increament生成方式。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的 时候将此值加1作为主键。increment方式的不足之处是当多个线程并发对数据库表进行写操作时,可能出现相同的主键值,发生主键重复的冲突,因此多线程并发操作时,不应该使用此方法。

显然我们的主键username不应该适应此种方式,而应该用assigned:

主键由外部程序负责生成,无需Hibernate参与。----如果要由程序代码来指定主键,就采有这种.

还有其他几种主键的生成方式:

identity:

如果数据列的类型是 long, short 或 int ,可使用主键生成器生成自动增长Hibernate主键。与底层数据库有关,要求数据库支持identify,如MySQL中是auto_increment,SQL Server中是Identify.支持的数据库有MySQL,SQL Server,DB2,Sybase和HypersonicSQL.(好像不支持oracle) 无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。identity的优点是不会发生 increment方式的并发错做问题。数据库涉及到的表要设置自动增长。

sequence:

在ORACLE等数据库中使用sequence生成主键。sequence的特点是于数据库的相关性,seqhio要求底层能支持sequence,列如Oracle。

hilo:

通过hi/lo 算法生成主键,需要一个表来保存额外的主键信息。这样生成的标识符只在特定的数据库是唯一的,在使用JTA(Java分布式事务) 获得链接或用户自定义提供的链接中,不要使用这种生成器。hilo方式需要维护表信息,因此对数据的影响的要率会造成一定影响。

seqhio:

与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。如果数据列的类型是 long, short 或 int可使用该主键生成器。

native:

由Hibernate根据不同的数据库方言,自行判断采用identity、hilo、sequence其中一种作为Hibernate主键生成方式,native的 优点是与底层性无关,便于不同数据库之间的移植,由Hibernate根据不同数据库选择主键的生成方式。在oracle中需要创建叫 Hibernate_sequence名字的sequence,如果设置了Hibernate.hbm2ddl.auto属性,不需要手动建立序列,前提 是数据库帐号必须有Create Sequence这种高级权限。mysql等数据库则不用建立sequence。

uuid.hex:

采用基于128位的算法生成唯一值,并编制成32位长度的唯一字符串作为主键值,uuid.hex的优点是支持大部分数据库,缺点就是要占用较大的存储空间。对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。

uuid.string:

使用UUID算法,UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能在PostgreSQL数据库中使用。uuid.string同uuid.hex类似,需要占很大的存储空间。

好,我们改变一下主键的生成方式吧:

执行register.jsp,点击提交按钮,运行结果:

添加一些数据后后有如下显示:

我们庆祝一下吧,说明我们插入数据成功了:

查看数据库会发现数据库中的确增加数据了。

java web从零单排第二十一期《Hibernate》主键的生成方式,用户增加与显示用户列表的更多相关文章

  1. java web从零单排第二十二期《hibernate》代码分析之查看,删除用户信息

    前两期的内容不知道大家理解的怎么样,我并没有详细的去解释代码的意思,如果你已经自己都钻研明白了,那最好过,但还是一知半解的话,接下来我会仔细分析代码. 1.register.jsp:这部分代码只是简单 ...

  2. java web从零单排第十六期《struts2》控制标签(2)

    1.s:subset标签概述: s:subset标签功能是从一个集合中取出部分元素合并成一个新的集合,新生成的这个集合是原来集合的子集.属性和意义如下: 属性名 是否必需 默认值 类型 说明介绍 co ...

  3. java web从零单排第十七期《struts2》数据标签库(1)

    1.s:action标签: 此标签的作用是在JSP页面中访问action类的数据,执行某些操作,并返回相应的数据.其属性及意义如下: 属性名 是否必需 默认值 类型 说明介绍 executeResul ...

  4. Java Web整合开发王者归来(JSP + Servlet + Struts + Hibernate + Spring) - 读书笔记

    第1章 状态码表示响应类型: 保留 表示请求成功地接收 完成请求客户需进一步细化请求 客户错误 服务器错误 Web服务器: Apache服务器,特长是处理静态页面,效率非常高. Tomcat提供对JS ...

  5. JAVA Web day02--- Android小白的第二天学习笔记

    CSS(美工部分知识,了解) 1. CSS概述 1.1.CSS是什么? * CSS 指层叠样式表 样式表:存储样式的地方 层叠:一层一层叠加 高大富有帅气人 1.2.CSS有什么作用? *CSS就是用 ...

  6. PHP从零单排(十八)图像处理

    1.打开现有的图像 <?php header("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jp ...

  7. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成

    ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序 ...

  8. Java Hibernate 主键生成10大策略

    本文将介绍Hibernate中主键生成的几种策略方案,有需要的朋友可以参考一下. 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为lon ...

  9. java框架篇---hibernate主键生成策略

    Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...

随机推荐

  1. subversion(SVN)安装配置

    简介subversion(简称svn)是近年来崛起的版本管理软件系统,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.Subversion是一个版本控制系统,相对于的RCS. ...

  2. FZU みねちゃんの修罗场(从一堆出现三次的数中找出出现两次的数)

    みねちゃんの修罗场 Time Limit: 5000 mSec     Memory Limit: 1024 KB Description みねちゃん是个成绩优秀大学二年级学生,本来是和像自己妹妹一般 ...

  3. JQUERY操作html--获取和设置内容、属性、回调函数

    一:jQuery - 获取内容和属性 1.获得内容 - text().html() 以及 val() text() - 返回所选元素的文本内容 html() - 返回所选元素的内容(包括 HTML 标 ...

  4. algorithm之不变序列操作

    概述:不变序列算法,参见http://www.cplusplus.com/reference/algorithm/ /* std::for_each template <class InputI ...

  5. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  6. bzoj 2209: [Jsoi2011]括号序列 splay

    2209: [Jsoi2011]括号序列 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 833  Solved: 392[Submit][Status ...

  7. MAT(Memory Analyzer Tool)使用心得

    起因:最近在跟踪产品的性能问题,期间主要问题体现在JVM的内存回收问题,使用MAT工具进行JVM内存分析(也可对android 的应用内存分析) 问题描述: 1.部分后端服务在运行一段时间后会突然年老 ...

  8. 网站注册与登录使用 bcrypt与 passport 双重验证 解释

    网站在登录前,需要进行注册收集用户基本信息,bcrypt 提供密码加密验证的方法,但是使用不正确,会给初学者带来各种问题. bcrypt 的安装: npm i bcrypt 经过测试,经常安装不成功, ...

  9. redhat7初始化yum源

    1.卸载原有的yum [app@localhost ~]$ su - root Password: Last :: CST on pts/ [root@localhost ~]# cd /etc/yu ...

  10. EXEC sp_executesql with multiple parameters

    传递多个参数 https://stackoverflow.com/questions/28481189/exec-sp-executesql-with-multiple-parameters http ...