开发者社区> 技术小美> 正文

经典hibernate配置详解

简介:
+关注继续查看

<meta>元素的属性 

属性 描述 
class-description 指定描述类的javaDoc 
field-description 指定描述类的属性javaDoc 
interface 如果为true,表明生成接口而非类,默认false 
implements 指定类所实现的接口 
extends 指定继承的父类名 
generated-class 重新指定生成的类名 
scope-class 指定类的修饰符,默认public 
scope-set 指定set方法的修饰符,默认public 
scope-get 指定get方法的修饰符,默认public 
scope-field 指定类的属性的修饰符,默认private 
use-in-toString 如果为true,表示在toString()方法中包含此属性 
gen-property 如果为false,不会在java类中生成此属性,默认true 
finder-method 指定find方法名 


<column>元素属性 
name 设定字段名字 
length 设定字段长度 
not-null 如为true,指名该字段不允许为null,默认false 
unique 如为true,指名该字段具有唯一约束,默认false 
index 给一个或多个字段建立索引 
unique-key 为多个字段设定唯一约束 
foreign-key 为外键约束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含 
foreign-key属性,在双向关联中,inverse属性为true的一端不能设置foreign-key 
sql-type 设定字段sql类型 
check 设定sql检查约束 


用于控制insert or update 语句的映射属性 

<property>元素的insert属性 如为false,在insert中不包含该字段,默认为true 
<property>元素的update属性 如为false,在update中不包含该字段,默认为true 
<class>元素的mutable属性 如为false,等价于所有字段的update属性为false,默认为true 
<property>元素的dunameic-insert属性 如为true,表明动态生成insert语句,只有不为null,才会包含insert语句中,默认false 
<property>元素的dunameic-update属性 如为true,表明动态生成update语句,只有不为null,才会包含insert语句中,默认false
<class>元素的dunameic-insert属性 如为true,表明等价于所有字段动态生成insert语句,只有不为null,才会包含insert语句中 ,默认false 
<class>元素的dunameic-update属性 如为true,表明等价于所有字段动态生成update语句,只有不为null,才会包含insert语句中 ,默认false 

Hibernate提供的内置标识符生成器 
increment 适用于代理主键,自动递增,增1(只能是long,int,short) 
identity 适用于代理主键,底层数据库自动增长字段类型(数据库需支持,只能是long,int,short) 
(oralce)sequence 适用于代理主键,根据底层数据库的序列来生成标识符(数据库支持序列,只能是long,int,short) 
hilo 适用于代理主键,根据high/low算法来生成.Hibernate把特定表的字段作为high值,在默认情况下选用hibernate_unique_key表的next_hi字段 
(mysql,mssql)native 适用于代理主键,根据数据库自动生成标识符支持能力,来选择identity,sequence,hilo 
uuid.hex 适用于代理主键,采用128位UUID(universal unique identification)算法来生成标识.此算法能在网络环境中生成唯一的字符串标识符, 
(不建议使用,字符串类型比整形类型的主键占用更多的空间) 
assigned 适用于自然主键,由java程序负责生成. 

<hibernate-mapping> 
<class name="项目路径" table="库中对应表名" schema="dbo" catalog="netoa"> 
<meta attribute="class-description">指定描述类的javaDoc</meta> 
<meta attribute="class-scope">指名类的修饰类型</meta> 
<meta attribute="extends">指定继承类</meta> 
<id name="bgrkbh" type="long"> 
<column name="BGRKBH" precision="15" scale="0" sql-type="库中类型" check="BGRKBH>10"/> 
<meta attribute="scope-set">指定类,类属性的getxxx(),setxxx()方法的修饰符 
包括:static,final,abstract,public,protected,private 
</meta> 
<generator class="assigned" /> 
</id> 
<property name="Class.fileName" type="long"> 
<column name="YSLX" precision="精度" scale="刻度" not-null="默认false" sql-type="数据库中类型"/> 
附加属性不会影响Hibernate的运行行为 
<meta attribute="field-description">指定描述类的javaDoc</meta> 
指定描述类属性的javaDoc 
</property> 
</class> 
</hibernate-mapping> 


注意: 
1 Session的commit()和flush()方法的区别,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务; 
commit()方法会先调用flush(),然后提交事务.提交事务意味着对数据库所作的更新被永久保存下来. 

2 Session的setFlushMode()方法用于设定清理缓存的时间点.FlushMode类定义了三种不同的清理模式 

清理缓存的模式 Session的查询方法 Session的commit()方法 Session的flush()方法 
FlushMode.AUTO 清理 清理 清理 
FlushMode.COMMIT 不清理 清理 清理 
FlushMode.NEVER 不清理 不清理 清理 

3 Hibernate应用中java对象的状态 
临时状态 (transient):刚刚用new语句创建,还没被持久化,不处与Session的缓存中,处于临时状态的java对象被称为临时对象. 
持久化状态(persistent):已经被持久化,加入session的缓存中.处于持久化状态的java对象被称为持久化对象. 
游离状态(detached):已经被持久化,但不在处于session的缓存中.处于游离状态的java对象被称为游离对象. 
(注意:::::)持久化类与持久化对象是不同的概念.持久化类的实例可以处于临时状态,持久化状态和游离状态.其中处于 
持久化状态的实例 被称为持久化状态. 

临时对象的特性: 
1 不处于缓存中,也可以说,不被任何一个Session实例关联 
2 在数据中没有对应的纪录. 

在此情况下,java对象进入临时状态 
1 当通过new创建一个对象时,此时不和数据库中的任何纪录的 

ex:对象的状态转化过程 

程序代码 对象的生命周期 对象的状态 
tx=session.beginTransaction(); 
Object obj=new Object("tow",new HashSet()); 开始生命周期 临时状态 

session.save(obj); 处于生命周期 转化为持久状态 

Long id=obj.getId(); 
obj=null; 
Object obj2=(Object)session.load(Object.class,id); 处于生命周期 处于持久化状态 
tx.commit(); 

session.close(); 处于生命周期 转变成游离状态 

System.out.print(obj2.getName()); 处于生命周期 处于游离状态 

obj2=null; 结束生命周期 结束生命周期 


4 cascade属性 

cascade属性值 描述 
none 在保存更新时,忽略其他关联对象,他是cascade默认属性 
save-update 当通过Session的save(),update()以及saveOrUpdate()方法来保存 
或更新当前对象时,及联保存所有关联的新建的临时对象,并且及联更新所有关联的游离对象 
delete 当通过session的delete()方法删除当前对象时,及联删除所有对象 
all 包含save-update及delete行为,此外对当前对象执行evict()或lock 
()操作时,也会对所有关联的持久化对象执行evict()或lock()操作 
delete-orphan 删除所有和当前对象解除关联关系的对象 
all-delete-orphan 包含all和delete-orphan 

5 Hibernate映射类型,对应的java基本类型及对应的标准SQL类型 

Hibernate 映射类型 java类型 标准SQL类型 
integer或者int int INTEGER 
long long BIGINT 
short short SMALLINT 
byte byte TINYINT 
float float FLOAT 
double double DOUBLE 
big_decimal java.math.BigDecimal NUMERIC 
character char and string CHAR 
string string VARCHAR 
boolean boolean BIT 

Hibernate映射类型,对应的java时间和日期类型及对应的标准SQL类型 

映射类型 java类型 标准SQL类型 描述 
date java.util.Date或者java.sql.Date DATE 代表日期,YYYY-MM-DD 
time java.util.Date或者java.sql.Date TIME 代表时间,形式为HH:MM:SS 
timestamp java.util.Date或者java.sql.Timestamp TIMESTAMP 代表日期和时间,YYYYMMDDHHMMSS 
calendar java.util.Calendar TIMESTAMP 同上 

calendar_date java.util.Calendar DATE 代表日期,YYYY-MM-DD












本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1117724,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何顺利通过计算机专业毕业答辩
临近毕业,很多同学项目和论文都准备的差不多了,只剩下最后一个环节,那就是决定你能否顺利毕业的毕业答辩。最后很多小伙伴咨询关于答辩的问题,也了解到了大家比较焦虑的心理,毕竟对我们来讲,努力了四年或者三年,最主要的目的还是为了这一纸毕业证,它将是我们走向社会,通向成功的第一把钥匙,今天就来给大家聊聊毕业答辩的一些问题。
5 0
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感
6 0
ECS使用体验
在阿里云领取了一个服务器,分享一下使用体验
5 0
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感
5 0
ECS使用有感
我是一名即将步入社会的大学生,随着网络法等相关专业知识的学习愈发强烈。查询资料时,常常会浏览到制作精美的个人站,因此产生了建设自己个人站的设想,但是由于业余时间少之甚少,同时听闻购买域名与服务器的价格不菲,因此计划一直未能实现
4 0
postgressql简单配置
postgresql.conf 和 pg_hba.conf 文件
4 0
Vue的方法的调用以及传参
前面的文章讲到了如何用CDN的方式引入vue.js。今天这篇文章介绍如何在vue中调用方法以及传参!
8 0
+关注
6902
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载