IT忍者神龟之Hibernat持久化对象-数据表映射配置回想
1.持久化对象POJO编写规则:
1) 有空參public构造器;
2) 提供标识属性。映射数据表主键;
3) 属性提供setter和getter方法。
4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0;
5) 不使用final修饰。
假设使用final则无法生成代理对象。当使用了final。load查询将如同get查询。
2.POJO的OID:
OID是持久化类与数据表主键相应的属性,用来唯一区分持久化对象。
自然主键:採用数据库中有意义的列的值作为主键(有意义)
代理主键:採用自己主动生成的流水号、UUID作为主键(无意义。推荐)
3.数据类型:
基本类型无法区分null和0,开发中POJO属性都使用包装类型。
4.持久化类配置POJO.hbm.xml:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml="1.0"="UTF-8"?><!DOCTYPE "-//Hibernate/Hibernate "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!--<hibernate-mapping="cn.cvu.domain"> <!-- <class="User"="table_user"="db_hibernate"> <!-- <id="id"="id"="int"> <!-- <generator="native"></generator> <!-- </id> <!-- <!—hibernate定义的数据类型string <property="name"="name"="string"></property> <!—java定义的为int <property="age" ="age" ="int" property> <!—sql定义的数据类型使用sql-type声明 <property="city"="city"="string"></property> <!-- </class></hibernate-mapping> |
1)主键生成策略increment:顶层递增:

由hibernate自己主动完毕,原理:先查询最大值。再插入此值加一。OID必须为long、int或short类型。
长处:跨数据库。
缺点:多线程并发訪问问题。
2)主键生成策略identity:底层递增:

由数据库自己主动完毕,要求数据库必须支持自增主键。mysql支持。oracle不支持。OID必须为long、int或short类型。
长处:无并发訪问问题。
3)主键生成策略sequence:序列:
由数据库自己主动完毕递增。要求数据库必须支持序列。mysql不支持。oracle支持。OID必须为long、int或short类型。
Oracle:
1创建序列:create sequence myseq;
2调用序列:insert into customer values (myseq.nextval); #序列加一
4)主键生成策略native:本地:

採用数据库支持的自增策略。 mysql:identity,oracle:sequence。
OID必须为long、int或short类型。
长处:跨数据库平台。
5)主键生成策略uuid:标识符:

由数据库自己主动创建。 uuid是32位唯一字符串。表单主键使用varchar类型,POJO相应属性是String类型。
6)主键生成策略assigned:手动指定:

在调用hibernate时手动指定主键的值,用于自然主键(有意义的)。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public Session Transaction Usernew user.setId(20130124); //手动设置主键 user.setName("EminemXXX"); user.setAge(42); user.setCity("NewYorkXXX"); session.save(user); transaction.commit(); session.close(); } |
7)主键生成策略:复合主键:
(1)编写POJO类 Person.java:
|
1
2
3
4
5
6
7
8
9
10
11
|
packageimport//务必事先序列化接口public implements private//相应表单的复合主键 private//相应表单的复合主键 private //get/set //toString} |
(2)配置POJO.hbm.xml:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?xml="1.0"="UTF-8"?><!DOCTYPE "-//Hibernate/Hibernate "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping="cn.cvu.domain"> <class="Person"="table_person"="db_hibernate"> <!-- <composite-id> <!-- <key-property="firstName"="nameFirst"></key-property> <key-property="secondName"="nameFirst"></key-property> </composite-id> <!-- <property="address"="addr"="string"></property> </class></hibernate-mapping> |
(3)配置hibernate.cfg.xml,载入Person.hbm.xml文件:

(4)操作类的方法:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public Configurationnew SessionFactory Session Transaction Personnew person.setFirstName("C"); person.setSecondName("Vigiles"); person.setAddress("Beijng"); session.save(person); transaction.commit(); session.close(); sessionFactory.close(); } |
(5)结果:

INFO: HHH000262: Table not found: tb_person
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000388: Unsuccessful: create table db_hibernate.tb_person (namef varchar(255) not null, names varchar(255) not null, age integer, city varchar(255), primary key
(namef, names)) type=InnoDB
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete

|
1
2
3
|
<!-- <property="hibernate.dialect"> org.hibernate.dialect.MySQL5InnoDBDialect</property> |
-end
IT忍者神龟之Hibernat持久化对象-数据表映射配置回想的更多相关文章
- 以对象的方式来访问xml数据表(三)
怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...
- 2.一起来学hibernate之配置文件1与持久化对象
学框架,配置都是不可少的,有了配置,框架才知道我们想做什么,才知道如何去执行我们需要的操作! hibernate的配置文件,总体来说分为两个部分: 1.主配置文件hibernate.cfg.xml文件 ...
- Hibernate入门5持久化对象关系和批量处理技术
Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...
- Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征
以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...
- Hibernate之Session对象的相关方法以及持久化对象的状态
一.持久化对象的状态 站在持久化的角度, Hibernate 把对象分为 4种状态: 持久化状态,临时状态,游离状态,删除状态.Session 的特定方法能使对象从一个状态转换到另一个状 ...
- Hibernate持久化对象
持久化类应遵循的规则: 有无参构造器,构造器的修饰符>=默认访问控制符 有标识属性,映射数据库表的主键,建议使用基本类型的包装类 每个成员有setter和getter 非final修饰的类 重写 ...
- hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)
三态的基本概念: 1, 暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...
- Hibernate 持久化对象的状态
持久化对象有3种状态:1.持久化状态 2.临时状态 3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)• 在使用代理主键 ...
- hibernate 持久化对象的生命周期 2.1
持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...
随机推荐
- JavaScript tab页
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Vue Invalid handler for event "": got undefined
原因:绑定的方法不是放在methods:{}里.比如我把绑定的函数写在了computed:{}里就会报这个错.
- 自定义input[type="checkbox"]样式
input[type=checkbox] { visibility: hidden; position: relative;} input[type=checkbox]:after { content ...
- 【Codeforces Round #455 (Div. 2) A】Generate Login
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举两个串的前缀长度就好. 组出来. 排序. 取字典序最小的那个. [代码] #include <bits/stdc++.h& ...
- SFC梯形图编程
SFC是居首的PLC编程语言 !: 不能为PLC所执行, 还需要其他的编程语言(梯形图) 转换成PLC可执行程序. 常用的SFC编程方法有三种 > 应用启保停电路进行 > 应用 置/复 ...
- Android学习笔记之网络接口(Http接口,Apache接口,Android接口)
目前Android平台有三种网络接口可以使用,他们分别是:Java.NET.*(标准Java接口),org.apache(Apache接口),和android.Net.*(android网络接口). ...
- ORACLE10g R2【单实例 FS→单实例FS】
ORACLE10g R2[单实例FS→单实例FS] 本演示案例所用环境: primary standby OS Hostname pry std OS Version RHEL5.8 RHEL5. ...
- 【Codeforces Round #446 (Div. 2) B】Wrath
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 倒着来,维护一个最小的点就可以了. [代码] #include <bits/stdc++.h> using namesp ...
- 【CS Round #43 E】Coprime Pairs
[链接]点击打开链接 [题意] 让你选择n个数字,组成一个数组,使得这n个数字中恰好有k对,它们是互质的. [题解] 我们可以先找出前n个质数,那么接下来的问题就转化为,凑出rest = n*(n-1 ...
- Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)
Dcloud课程5 php如何实现文件缓存技术(静态数据缓存) 一.总结 一句话总结:保存在磁盘上的静态文件,用PHP生成数据到静态文件中.其实cookie和session使用的就是这样的技术,所以c ...