Hibernate中domain配置文件
将主键改成自增长类型:
Oracle设置<generator class="increment" />
SQLServer 2000设置<generator class="identity" />
―――――――――例如SQLServer 2000中――――――――――――――――――
<id name="userid" type="java.lang.Integer">
<column name="userid" />
<generator class="identity" />
</id>
―――――――――――――――――Oracle中――――――――――――――――――
<id name="userid" type="java.lang.Integer">
<column name="userid" />
<generator class="increment" />
</id>
hibernate提供了产生自动增长类型主键的多种策略,这里以increment为例说明具体用法:
1、在数据库中建立表,主键名称为ID,类型为varchar2(字符串型)
2、在**.hbm.xml(hibernate映射文件)中配置如下
<class name="com.jat.bisarea.ho.Test" table="BA_VVTEST">
<id name="id" type="int" column="ID">
//该句指定使用hibernate自带的increment策略生成主键
<generator class="increment"/>
</id>
<property name="uname" type="java.lang.String" column="UNAME"/>
</class>
3、在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可,相关java代码如下:
Session s = HibernateUtil.currentSession();
Transaction tx = s.beginTransaction();
Test test = new Test();
String uname = httpServletRequest.getParameter("uname");
test.setUname(uname);
//只需对uname进行set,id由hibernate生成
s.save(test);
tx.commit();
4、使用其它策略的方法基本一致,例如hilo、seqhilo等
Generator 为每个 POJO 的实例提供唯一标识。一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括:
“assigned”
主键由外部程序负责生成,在 save() 之前指定一个。
“hilo”
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
“seqhilo”
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
“identity”
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
“sequence”
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
“native”
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
“uuid.hex”
由 Hibernate 基于128 位 UUID 算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
“uuid.string”
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。
“foreign”
使用另外一个相关联的对象的标识符作为主键。
1. native
我最常用的。可以保证多个数据库之间的可移植性。但是有可能有时候会有问题:因为不能控制id值,在数据倒表的时候可能无法满足业务需要。
2. sequence
这种地方可以解决上面用native时候的问题,但是需要堆数据库做一些其他配置。
3. uuid
理论上可以保证多个数据库生成的ID在一个系统里唯一,有时候挺有用。但是效率稍微低点(其实都无所谓)。
4. increment
最好不要用。如果有其他程序访问、修改数据库,那就恐怖了。
5. assigned
没怎么用过。一般不会用手工方式赋值主键,除非有特殊的需求。
6. foreign
在one-to-one的时候可能会用到。
7. 在使用数据库自动生成主键的时候,SQL语句会有所不同:有些数据库不许你填主键,有些要求你该字段必须为null,有些会完全忽略你写的主键的值。
分享到:
相关推荐
hibernate中用到联合主键的看看就会了很棒的资料
在hibernate中实现oracle的自动增长
hibernate应用[包括示例,映射,主键自增,各种查询操作方式以及配置文档以及Annotation示例]
支持自增主键,复合主键,外键关联。 生成Hibernate POJO类,Dao类,Service类,Action类。 生成保存,删除,修改,批量保存,批量修改,批量删除,按条件查询,分页查询等功能。 生成各大主流框架配置文件及JSP页面...
支持自增主键,复合主键,外键关联。 生成hibernate pojo类,dao类,service类,action类。 生成保存,删除,修改,批量保存,批量修改,批量删除,按条件查询,分页查询等功能。 生成各大主流框架配置文件...
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键...
* 9.increnment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。 * 例:@GeneratedValue(generator = ...
Struts2 Spring3 Hibernate3.3框架整合,增删改查,包含有数据库建表语句,包含有JAR包,包含有源代码。...使用的是Oracle的序列来提供的主键自增,建表和建立序列的sql语句,已经放在工程里面的WEBROOT目录下面了。
4.实现功能:实现了主键自增和不自增控制方法的重载.默认使用主键自增, //insert(entity)方法Id会自增,相当于调用insert(entity,true); //使用insert(entity,false)这样方式可以插入有固定Id的数据 5.支持代码混淆...
自增主键必须设置以下注解,否则报错 @GeneratedValue(strategy = GenerationType.IDENTITY) 在更新或删除数据时,必须调用getHibernateTemplate().flush(); 且在web.xml中添加 <filter>openSessionInViewFilter ...
)Hibernate: select last_insert_id()表中有个主键是自增列。可是在以往的项目中,没发现有这样的问题。于是在网上各种找也找不到原因。心想可能是配置问题。 最终在persistence.xml配置文件中找
* 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的...
持久(PO)层是由hibernate架构实现的,它包括关于整体数据 库的,通过Spring集成模板HibernateTemplate提供DAO 来使用PO。在Spring 的配置文件(applicationContext. xml)中配置sessionFactory的bean 来管理...
11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入...
11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入...
{1.8.1}自增运算}{28}{subsection.1.8.1} {1.8.1.1}Postincrement}{28}{subsubsection.1.8.1.1} {1.8.1.2}Preincrement}{28}{subsubsection.1.8.1.2} {1.8.1.3}复合赋值运算}{28}{subsubsection.1.8.1.3} {...