最有价值的hibernate配置文件
- 格式:doc
- 大小:37.50 KB
- 文档页数:9
Hibernate笔记2关于配置⽂件和表映射使⽤hibernate的准备⼯作。
⼀导⼊Hibernate 相关jar包和数据库驱动。
⼆新建项⽬,在src⽂件中导⼊hibernate.cfg.xml 总配置⽂件log4j.properties ⽇志⽂件Hibernate⽀持两种配置⽂件格式:hibernate.properties和hibernate.cfg.xml,⼤概xml形式⽤的⽐较多。
现在以 xml形式为例。
1 配置⽂件配置相关信息1<hibernate-configuration>2<session-factory>3<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property> //连接路径4<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> //mysql驱动5<property name="ername">root</property> //数据库⽤户名 root6<property name="hibernate.connection.password">123</property> //数据库密码 1237<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> //⽅⾔8<property name="hibernate.show_sql">true</property> //显⽰sql语句9 <property name="format_sql">true</proterty> //sql语句⾃动换⾏10<mapping resource="com/Test/po/User.hbm.xml"/>11</session-factory>12</hibernate-configuration>2 测试是否配置成功public class Test extends TestCase {public void Test1() throws Exception{Configuration config= new Configuration().configure(); //加载xml格式配置⽂件,如果加载properties格式配置⽂件,将.configure()去掉既可。
Xml代码1.<!--Hibernate Session工厂-->2.<bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">3.<property name="dataSource"ref="dataSource"/>4.<property name="packagesToScan">5.<list>6.<value></value>7.</list>8.</property>9.<property name="hibernateProperties">10. <props>11. <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>12. <prop key="e_query_cache">${hibere_query_cache}</prop>13. <prop key="hibernate.dialect">${hibernate.dialect}</prop>14. <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>15. <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>16. <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>17. <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>18. <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>19. <prop key="hibernate.show_sql">${e_sql_comments}</prop>20. <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_fil e_resource_path}</prop>21. </props>22. </property>23.</bean>hibernate.properties#Oracle方言# hibernate.dialect=org.hibernate.dialect.MySQL5Dialect# hibernate.dialect=org.hibernate.dialect.SQLServerDialect#hibernate方言hibernate.dialect=org.hibernate.dialect.SQLServerDialect#是否启用二级缓存,e_query_cache=true#二级缓存class# hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider #hibernate.cache.provider_class=org.hibernate.cache.SingletonEhCachePr oviderhibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider#二级缓存配置文件hibernate.cache.provider_configuration_file_resource_path=/cache/ehca che.xml#是否同步数据库结构(自动创建|更新|验证数据库表结构)#none: 不做任何操作#create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行。
Hibernate.cfg.xml常用配置总结测试时候Hibernate有如下常用甚至更多的配置,总结如下:(1)Hibernate.show_sql:是否在运行时候sql语句输出到控制台,编码阶段便于测试的。
(默认设置为true)(2)Hibernate.format_sql:输出在控制台sql语句是否进行排版,便于阅读。
(默认设置为true)(3)Hbm2ddl.auto:可帮助由java代码生成数据库脚本,进而生成具体表结构。
如:create/update/create-drop/validate。
Create:表示每次创建新的表格,原来的表删除,同时数据全部清楚重新插入数据。
(每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
)Update:表示在原有的表上更新,保存原来的数据。
(也就是原有数据不删除,依然存在,不需要重新插入,加载hibernate自动更新数据库结构)Create-drop:加载hibernate时创建,退出是删除表结构Validate:加载hibernate时,验证创建数据库表结构,如果是不同的话则不创建表。
(4)Hibernate.default_schema:默认数据库,如果设置了,则创建表的时候,所有表有前缀。
(5)Hibernate.dialect:配置hibernate方言,可针对特定的数据库优化。
(6)1.请慎重使用此参数,没必要就不要随便用。
2.如果发现数据库表丢失,请检查hibernate.hbm2ddl.auto的配置3.以上4个属性对同一配置文件下所用有的映射表都起作用例子如下:(一)Hibernate.format_sql:输出在控制台sql语句是否进行排版,便于阅读。
(默认设置为true)(二)Hbm2ddl.auto:可帮助由java代码生成数据库脚本,进而生成具体表结构的:create:先删除,再次创建表,再插入信息。
Hibernate的映射文件Hibernate的映射文件映射文件也称映射文档,用于向Hibernate提供关于将对象持久化到关系数据库中的信息.持久化对象的映射概念可全数存储在同一个映射文件中,也可将每一个对象的映射概念存储在独立的文件中.后一种方式较好,因为将大量持久化类的映射概念存储在一个文件中比较麻烦,建议采纳每一个类一个文件的方式来组织映射文档.利用多个映射文件还有一个优势:若是将所有映射概念都存储到一个文件中,将难以调试和隔离特定类的映射概念错误.映射文件的命名规那么是,利用持久化类的类名,并利用扩展名.映射文件需要在中注册,最好与领域对象类放在同一目录中,如此修改起来很方便.领域对象和类public class User{个选项在第一次启动程序时放开,以后切记关闭 --><!-- <property name="">create</property> --><!-- 持久化类的映射文件 --><mapping resource="com/sitinspring/domain/" /><mapping resource="com/sitinspring/domain/" /><mapping resource="com/sitinspring/domain/" /><mapping resource="com/sitinspring/domain/" /></session-factory></hibernate-configuration>映射文件物理位置例如映射文件的大体结构映射概念以hibernate-mapping元素开始, package属性设置映射中非限定类名的默许包.设置那个属性后,关于映射文件中列出的其它持久化类,只需给出类名即可.要引用指定包外的持久化类,必需在映射文件中提供全限定类名.在hibernate-mapping标签以后是class标签.class标签开始指定持久化类的映射概念.table属性指定用于存储对象状态的关系表.class元素有很多属性,下面将逐个介绍.IDId元素描述了持久化类的主码和他们的值如何生成.每一个持久化类必需有一个ID元素,它声明了关系表的主码.如右:Name属性指定了持久化类顶用于保留主码值的属性,该元素说明,User类中有一个名为id的属性.若是主码字段与对象属性不同,那么能够利用column属性.<id name="id" column="ID" ><generator class=""/></id>生成器生成器创建持久化类的主码值.Hibernate提供了多个生成器实现,它们采纳了不同的方式来创建主码值.有的是自增加式的,有点创建十六进制字符串, 还能够让外界生成并指定对象ID,另外还有一种Select生成器你那个从数据库触发器trigger检索值来取得主码值.右边利用了用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(利用了IP地址)。
经典hibernate配置详解2008-09-09 20:29:29标签:<meta>元素的属性属性描述class-description 指定描述类的javaDocfield-description 指定描述类的属性javaDocinterface 如果为true,表明生成接口而非类,默认false implements 指定类所实现的接口extends 指定继承的父类名generated-class 重新指定生成的类名scope-class 指定类的修饰符,默认publicscope-set 指定set方法的修饰符,默认publicscope-get 指定get方法的修饰符,默认publicscope-field 指定类的属性的修饰符,默认privateuse-in-toString 如果为true,表示在toString()方法中包含此属性gen-property 如果为false,不会在java类中生成此属性,默认true finder-method 指定find方法名<column>元素属性name 设定字段名字length 设定字段长度not-null 如为true,指名该字段不允许为null,默认falseunique 如为true,指名该字段具有唯一约束,默认falseindex 给一个或多个字段建立索引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语句中 ,默认falseHibernate提供的内置标识符生成器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,hilouuid.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 清理清理清理MIT 不清理清理清理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); 处于生命周期处于持久化状态mit();session.close(); 处于生命周期转变成游离状态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-orphan5 Hibernate映射类型,对应的java基本类型及对应的标准SQL类型Hibernate 映射类型 java类型标准SQL类型integer或者int int INTEGERlong long BIGINTshort short SMALLINTbyte byte TINYINTfloat float FLOATdouble double DOUBLEcharacter char and string CHARstring string VARCHARboolean boolean BITHibernate映射类型,对应的java时间和日期类型及对应的标准SQL类型映射类型 java类型标准SQL类型描述。
Hibernate配置文件详解hibernate的基本配置文件有两种:hibernate.cfg.xml和model.hbm.xml文件。
hibernate.cfg.xml包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到Configuration和SessionFactory实例;model.hbm.xml包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping 节点被加载到Configuration和SessionFactory实例。
这两种文件信息包含了Hibernate的所有运行期参数。
下面我们用详细的例子来说明这两种文件的基本结构和内容。
一、hibernate.cfg.xml文件:[html] view plain copy 在CODE上查看代码片派生到我的代码片<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)--> <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- 正文开始--><hibernate-configuration><!--下面是数据库的基本连接信息,对一个应用来说,设置一个session-factory节点就够了,除非我们中间使用了多个数据库--><session-factory><!--用户名--><property name="ername">root</property><!--url信息--><property name="connection.url">jdbc:mysql://localhost:3306/webases</property><!--数据库方言信息--><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--密码--><property name="connection.password">274507</property><!--数据库驱动信息--><property name="connection.driver_class">com.mysql.jdbc.Driver</property><!--指定Hibernate映射文件路径--><mapping resource="com/Hibernate/test_products.hbm.xml" /></session-factory></hibernate-configuration>二、.hbm.xml文件:由于Hibernate的关联关系包含了一对一、一对多、多对一和多对多等四种类型,因此,也就有分别与之对应的四种.hbm.xml文件。
Hibernate3的配置参数汇总2009年09月05日星期六 14:57SQL方言1、Hibernate JDBC属性属性名用途hibernate.connection.driver_class jdbc 驱动类hibernate.connection.url jdbc URL ername 数据库用户hibernate.connection.password 数据库用户密码hibernate.connection.pool_size 连接池容量上限数目注:使用C3P0的properties样例代码:hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/mydatabase ername = myuserhibernate.connection.password = secrethibernate.c3p0.min_size=5hibernate.c3p0.max_size=20hibernate.c3p0.timeout=1800hibernate.c3p0.max_statements=50hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect2、Hibernate的数据源属性属性名用途hibernate.connection.datasource 数据源JNDI名字hibernate.jndi.urlJNDI提供者的URL (可选)hibernate.jndi.class J NDI InitialContextFactory类 (可选)ername 数据库用户 (可选) hibernate.connection.password 数据库用户密码 (可选)注:应用程序服务器JNDI数据源的hibernate.properties样例代码:hibernate.connection.datasource = java:/comp/env/jdbc/test hibernate.transaction.factory_class = \org.hibernate.transaction.JTATransactionFactoryhibernate.transaction.manager_lookup_class = \org.hibernate.transaction.JBossTransactionManagerLookuphibernate.dialect = org.hibernate.dialect.PostgreSQLDialect3、Hibernate配置属性(可选)属性名用途hibernate.dialect一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.取值full.classname.of.Dialecthibernate.show_sql输出所有SQL语句到控制台.取值true | falsehibernate.format_sql在log和console中打印出更漂亮的sql.取值true | falsehibernate.default_schema在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上.取值SCHEMA_NAMEhibernate.default_catalog在生成的SQL中, 将给定的catalog附加于没全限定名的表名上.取值CATALOG_NAMEhibernate.session_factory_nameSessionFactory创建后,将自动使用这个名字绑定到JNDI中.取值jndi/composite/namehibernate.max_fetch_depth为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取.取值建议在0到3之间取值hibernate.default_batch_fetch_size为Hibernate关联的批量抓取设置默认数量.取值建议的取值为4, 8, 和16hibernate.default_entity_mode为由这个SessionFactory打开的所有Session指定默认的实体表现模式.取值dynamic-map, dom4j, pojohibernate.order_updates强制Hibernate按照被更新数据的主键,为SQL更新排序。
ORM----Object/Relational Mapper对象-关系型数据映射组件通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中元数据的描述有xml 和注解两种方式对象-关系映射(O/R)常用的ORM中间件:Hibernate TopLink JDOHibernate基于JavaBean的实体域对象称为POJO (plain old java object) 或PO(Persistent Object) 简单,不需要实现任何接口或继承任何类移植性高映射了数据表的字段以面向对象的方式体现出数据表之间的关系映射文件的命名规则:PO名称.hbm.xmlHibernate 的配置文件show_sql 为true时,表示正在执行的程序。
会在控制台打印出所执行的SQL语句<mapping>必须通过配置<mapping>元素的resource属性,Configuration对象Java对象和关系数据库表的映射文件(*.hbm.xml)映射文件(*.hbm.xml)指定对象与关系数据之间的映射<id>元素<class>元素中必须存在<id>子元素,且<id>子元素只能出现一次<generator>元素用来设定标识符生成器Hibernate使用OID(对象标识符)唯一标识对象<id>元素指定Hibernate_helloworld:引入jar包:hibernate3.jarlib/required目录下所有jar包数据库jdbc驱动jar包如果使用slf4j 日志默认实现需要下载对应的实现类jar包: slf4j-nop-1.6.1.jar如果使用log4j 需要下载相应版本的log4j实现类jar包:log4j-1.2.16.jar 并引入slf4j-log4j12-1.6.1.jar 如果使用hibernate-annotations 引入lib\jpa\hibernate-jpa-2.0-api-1.0.0.Final.jar创建hibernate配置文件hibernate.cfg.xml<hibernate-configuration><session-factory><!-- oracle 配置信息可以在project/etc目录下的hibernate.properties中查询--><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:PXIONG</property> <property name="ername">px</property><property name="connection.password">px</property><!-- dialect 指定数据库方言--><property name="dialect">org.hibernate.dialect.Oracle10gDialect</property><!-- show_sql format_sql 用于查看hibernate生成的sql语句--><property name="show_sql">true</property><property name="format_sql">true</property><!--hbm2ddl.auto 指定db的ddl方式取值validate | update | create | create-dropcreate 启动时执行create语句会删除表等数据库对象再create 关闭SessionFactory时不drop create-drop 启动时执行create语句关闭SessionFactory时dropupdate 会更新表结构validate 校验表与配置信息是否相符如果不同报错另外:在实际项目中一般是先创建好表再用工具生成java类一般不使用hbm2ddl创建表--><property name="hbm2ddl.auto">update</property><!-- 指定映射文件resource 指定Java对象和关系数据库表的映射文件(*.hbm.xml)--><mapping resource="org/px/ch1/dao/po/Student.hbm.xml"/></session-factory></hibernate-configuration>创建Student类/*** hibernate po类的要求:* 1 无参的构造方法* 2 唯一标示id(主键) [可选] * 3 非final类 [可选]4 getter setter*/public class Student {private int studentId;private String studentName;private short age;private String sex;private Date birthday;private float score;private String mm; //这个字段不是数据库表字段映射文件不写就可以了 /*setter getter .. */}创建Student po类映射文件Student.hbm.xml<!-- package属性指定包名简化类的编写适合此文件有多个类的情形--><hibernate-mapping package="org.px.ch1.dao.po"><!-- class 指定java类名table 指定表名两者相同table可省--><class name="Student"table="STUDENT"><!--id 指定OID(对象标识符) hibernate使用OID唯一标示一个po对象name java类属性名column同名可省type 指定数据类型(可指定的数据类型可以是hibernate的、java的)省略表示由hibernate自动选择generator 指定生成主键的主要方式native 根据数据库对自动生成标识符的支持能力,来选择主键生成方式适合所有数据库oracle 自动生成序列increment Hibernate生成,select max(STUDENTID) 作为主键适合所有数据库identity 由底层数据库(支持自动增长)生成,常用于sqlserver mysqlsequence 由数据库提供的序列生成,适合OracleAssigned 通过程序指定不指定generator时的默认--><id name="studentId"column="STUDENTID"type="ng.Integer"> <generator class="native"/></id><!--property 指定java类属性及数据库字段信息name 属性名column相同可省type 数据类型(一般由hibernate自动选择)--><property name="studentName"column="STUDENTNAME"length="20"not-null="true"/><property name="sex"column="SEX"/><!-- percision指定数字类型的长度scale指定小数位--><property name="age"type="ng.Short"><column name="AGE"precision="3"scale="0"/> </property><!-- date hibernate的数据类型--><property name="birthday"type="date"/><property name="score"><column name="SCORE"precision="5"/></property></class></hibernate-mapping>编写测试类public class HelloHibernate {public static void hello(Student student) {Session session=null;Transaction tran=null;try {Configuration cfg=new Configuration();//读取默认配置文件hibernate.cfg.xml SessionFactory sf=cfg.configure().buildSessionFactory();//创建SessionFactory session=sf.openSession(); //打开Sessiontran=session.beginTransaction(); //开始事务session.save(student); //保持对象到数据库mit(); //提交事务} catch (HibernateException e) {if(tran!=null){tran.rollback(); //回滚事务}throw e;}finally{if(session!=null && session.isOpen()){session.close();}}}public static void main(String[] args) { Student student=new Student();//student.setStudentId(1);student.setStudentName("东方不败");student.setAge(Short.valueOf("18"));student.setSex("F");student.setBirthday(new Date());student.setScore(99.5F);hello(student);}}hibernate工程jar包说明:。
<hibernate-mapping package="包名"><classs schema="数据库用户名" name="类名" table="表名"><id name="主键在java类中的字段名" column="对应表中字段" type="类型"><generator class="主键生成策略"/></id> ……</class></hibernate-mapping>1. 主键(id)Hibernate的主键生成策略有如下几种:1) assigned主键由外部程序负责生成,在save() 之前指定。
2) hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3) seqhilo与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的Sequence,适用于支持Sequence 的数据库,如Oracle。
4) increment主键按数值顺序递增。
此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。
这种方式可能产生的问题是:不能在集群下使用。
5) identity采用数据库提供的主键生成机制。
如DB2、SQL Server、MySQL 中的主键生成机制。
6) sequence采用数据库提供的sequence 机制生成主键。
如Oralce 中的Sequence。
7) native由Hibernate 根据使用的数据库自行判断采用identity、hilo、sequence 其中一种作为主键生成方式。
8) uuid.hex由Hibernate 基于128 位UUID 算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(.hbm.xml)把java对象或持久化对象(Persistent Object,PO)映射到数据库中的数据表,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作.Hibernate配置文件主要用来配置数据库连接参数,例如数据库的驱动程序URL,用户名,密码等。
两种格式:hibernate.properties和hibernate.cfg.xml。
一般情况下,hibernate.cfg.xml是Hibernate的默认配置文件。
(1)hibernate.properties:在Hibernate-3.1的etc目录下有一个hibernate.properties模板。
该配置模板文件定义了连接各种数据库所需要的参数。
需要使用hibernate.properties时,修改该模板即可。
该模板文件中每一个配置项前面的“#”是注释符号。
(2)hibernate.cfg.xml:除了要定义Hibernate的各项属性,还要定义程序中用的映射文件(xxx.hbm.xml)。
一般情况下是hibernate的默认配置文件。
hibernate.cfg.xml配置文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">sa</property><property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=hbDB</property><property name="dialect">org.hibernate.dialect.SQLServerDialect}public void setAge(Integer age) {this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}}映射文件另外,还要告诉Hibernate实体类Customers映射到数据库的哪个表,以及哪个属性对应数据库中的哪个字段。
经典hibernate配置详解2008-09-09 20:29:29标签:Hibernate配置JA V A框架<meta>元素的属性属性描述class-description 指定描述类的javaDocfield-description 指定描述类的属性javaDocinterface 如果为true,表明生成接口而非类,默认false implements 指定类所实现的接口extends 指定继承的父类名generated-class 重新指定生成的类名scope-class 指定类的修饰符,默认publicscope-set 指定set方法的修饰符,默认publicscope-get 指定get方法的修饰符,默认publicscope-field 指定类的属性的修饰符,默认privateuse-in-toString 如果为true,表示在toString()方法中包含此属性gen-property 如果为false,不会在java类中生成此属性,默认true finder-method 指定find方法名<column>元素属性name 设定字段名字length 设定字段长度not-null 如为true,指名该字段不允许为null,默认falseunique 如为true,指名该字段具有唯一约束,默认falseindex 给一个或多个字段建立索引unique-key 为多个字段设定唯一约束foreign-key 为外键约束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含foreign-key属性,在双向关联中,inverse属性为true的一端不能设置foreign-keysql-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语句中,默认falseHibernate提供的内置标识符生成器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,hilouuid.hex 适用于代理主键,采用128位UUID(universal uniqueidentification)算法来生成标识.此算法能在网络环境中生成唯一的字符串标识符,(不建议使用,字符串类型比整形类型的主键占用更多的空间) 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的mit()和flush()方法的区别,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;mit()方法会先调用flush(),然后提交事务.提交事务意味着对数据库所作的更新被永久保存下来.2 Session的setFlushMode()方法用于设定清理缓存的时间点.FlushMode类定义了三种不同的清理模式清理缓存的模式Session的查询方法Session的mit()方法Session的flush()方法FlushMode.AUTO 清理清理清理FlushMode.MIT 不清理清理清理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.mit();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-orphan5 Hibernate映射类型,对应的java基本类型及对应的标准SQL类型Hibernate 映射类型java类型标准SQL类型integer或者int int INTEGERlong long BIGINTshort short SMALLINTbyte byte TINYINTfloat float FLOATdouble double DOUBLEbig_decimal java.math.BigDecimal NUMERICcharacter char and string CHARstring string V ARCHARboolean boolean BITHibernate映射类型,对应的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:SStimestamp java.util.Date或者java.sql.Timestamp TIMESTAMP 代表日期和时间,YYYYMMDDHHMMSScalendar java.util.Calendar TIMESTAMP 同上calendar_date java.util.Calendar DATE 代表日期,YYYY-MM-DD。