hibernate數據源


 
Hibernate的描述文件可以是一個properties屬性文件,也可以是一個xml文件。下面講一下Hibernate.cfg.xml的配置。配置格式如下:
1. 配置數據源
在Hibernate.cfg.xml中既可以配置JDBC,也可以配置JNDI。在本小節中講述數據源如何配置。
hibernate.cfg.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>
<hibernate-configuration>
<session-factory>
<!– 各屬性的配置–>
<!—為true表示將Hibernate發送給數據庫的sql顯示出來 –>
<property name=”show_sql”>true</property>
<!– SQL方言,這邊設定的是MySQL –>
<property name=”dialect”>net.sf.hibernate.dialect.MySQLDialect</property>
<!– 一次讀的數據庫記錄數 –>
<property name=”jdbc.fetch_size”>50</property>
<!– 設定對數據庫進行批量刪除 –>
<property name=”jdbc.batch_size”>30</property>
<!—下面為JNDI的配置 –>
<!– 數據源的名稱 –>
<property name=”connection.datasource”>java:comp/env/jdbc/datasourcename</property>
<!– Hibernate的連接加載類 –>
<property name=”connection.provider_class”>org.hibernate.connection.DatasourceConnectionProvider
</property>
<property name=”dialect”>net.sf.hibernate.dialect.SQLServerDialect</property>
<!—映射文件 –>
<mapping resource=”com/amigo/pojo/User.hbm.xml”/>
<mapping resource=”com/amigo/pojo/Org.hbm.xml”/>
</session-factory>
</hibernate-configuration>

 

2. c3p0連接池
c3p0連接池是Hibernate推薦使用的連接池,若需要使用該連接池時,需要將c3p0的jar包加入到classpath中。c3p0連接池的配置示例如下:
hibernate.cfg.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>
<hibernate-configuration>
<session-factory>
<!– 顯示實際操作數據庫時的SQL –>
<property name=”show_sql”>true</property>
<!– SQL方言,這邊設定的是MySQL –>
<property name=”dialect”>net.sf.hibernate.dialect.MySQLDialect</property>
<!–驅動程序,在后續的章節中將講述mysql、sqlserver和Oracle數據庫的配置 –>
<property name=”connection.driver_class”>……</property>
<!– JDBC URL –>
<property name=”connection.url”>……</property>
<!– 數據庫用戶名 –>
<property name=”connection.username”>user</property>
<!– 數據庫密碼 –>
<property name=”connection.password”>pass</property>
<property name=”c3p0.min_size”>5</property>
<property name=”c3p0.max_size”>20</property>
<property name=”c3p0.timeout”>1800</property>
<property name=”c3p0.max_statements”>50</property>
<!– 對象與數據庫表格映像文件 –>
<mapping resource=”com/amigo/pojo/User.hbm.xml”/>
<mapping resource=”com/amigo/pojo/Org.hbm.xml”/>
</session-factory>
</hibernate-configuration>

 

在上述配置中,Hibernate根據配置文件生成連接,再交給c3p0管理。
3. proxool連接池
proxool跟c3p0以及dbcp不一樣,它是自己生成連接的,因此連接信息放在proxool配置文件中。使用它時,需要將proxool-0.8.3.jar加入到classespath中。
(關於Hibernate中配置Proxool在proxool的百度百科有詳細的介紹:http://baike.baidu.com/view/2098784.htm)
配置舉例如下:
hibernate.cfg.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>
<hibernate-configuration>
<session-factory>
<!– 顯示實際操作數據庫時的SQL –>
<property name=”show_sql”>true</property>
<!– SQL方言,這邊設定的是MySQL –>
<property name=”dialect”>net.sf.hibernate.dialect.MySQLDialect</property>
<!—proxool的配置 –>
<property name=”proxool.pool_alias”>pool1</property>
<property name=”proxool.xml”>ProxoolConf.xml</property>
<property name=”connection.provider_class”>net.sf.hibernate.connection.ProxoolConnectionProvider</property>
<!– 對象與數據庫表格映像文件 –>
<mapping resource=”com/amigo/pojo/User.hbm.xml”/>
<mapping resource=”com/amigo/pojo/Org.hbm.xml”/>
</session-factory>
</hibernate-configuration>
在hibernate.cfg.xml的同目錄下編寫proxool的配置文件:ProxoolConf.xml,該文件的配置實例如下:
ProxoolConf.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<!– the proxool configuration can be embedded within your own application’s.
Anything outside the “proxool” tag is ignored. –>
<something-else-entirely>
<proxool>
<alias>pool1</alias>
<!–proxool只能管理由自己產生的連接–>
<!– 驅動的url–>
<!– jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=GBK–>
<driver-url></driver-url>
<!– 驅動類,eg. com.mysql.jdbc.Driver–>
<driver-class></driver-class>
<driver-properties>
<!– 數據庫用戶名,eg. value為root–>
<property name=”user” value=”…”/>
<!– 數據庫密碼,eg. value為root–>
<property name=”password” value=”….”/>
</driver-properties>
<!– proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀–>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!– 指因未有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受–>
<maximum-new-connections>20</maximum-new-connections>
<!– 最少保持的空閑連接數–>
<prototype-count>5</prototype-count>
<!– 允許最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定–>
<maximum-connection-count>100</maximum-connection-count>
<!– 最小連接數–>
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>

 

4. dbcp連接池
在hibernate3.0中,已經不再支持dbcp了,hibernate的作者在hibernate.org中,明確指出在實踐中發現dbcp有 BUG,在某些種情會產生很多空連接不能釋放,所以拋棄了對dbcp的支持。若需要使用dbcp,開發人員還需要將commons-pool- 1.2.jar 和commons-dbcp-1.2.1.jar兩個jar包加入到classpath中。dbcp與c3p0一樣,都是由hibernate建立連接 的。
在hibernate2.0中的配置建立如下:
hibernate.cfg.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 2.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>
<hibernate-configuration>
<session-factory>
<!– 顯示實際操作數據庫時的SQL –>
<property name=”show_sql”>true</property>
<!– SQL方言,這邊設定的是MySQL –>
<property name=”dialect”>net.sf.hibernate.dialect.MySQLDialect</property>
<!–驅動程序,在后續的章節中將講述mysql、sqlserver和Oracle數據庫的配置 –>
<property name=”connection.driver_class”>……</property>
<!– JDBC URL –>
<property name=”connection.url”>……</property>
<!– 數據庫用戶名,eg. root –>
<property name=”connection.username”>…</property>
<!– 數據庫密碼, eg. root–>
<property name=”connection.password”>…</property>
<property name=”dbcp.maxActive”>100</property>
<property name=”dbcp.whenExhaustedAction”>1</property>
<property name=”dbcp.maxWait”>60000</property>
<property name=”dbcp.maxIdle”>10</property>
<property name=”dbcp.ps.maxActive”>100</property>
<property name=”dbcp.ps.whenExhaustedAction”>1</property>
<property name=”dbcp.ps.maxWait”>60000</property>
<property name=”dbcp.ps.maxIdle”>10</property>
<!– 對象與數據庫表格映像文件 –>
<mapping resource=”com/amigo/pojo/User.hbm.xml”/>
<mapping resource=”com/amigo/pojo/Org.hbm.xml”/>
</session-factory>
</hibernate-configuration>

 

5. MySql連接配置
在hibernate中,可以配置很多種數據庫,例如MySql、Sql Server和Oracle,MySql的配置舉例如下:
hibernate.cfg.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“>
<hibernate-configuration>
<session-factory>
<!– 各屬性的配置–>
<!—為true表示將Hibernate發送給數據庫的sql顯示出來 –>
<property name=”show_sql”>true</property>
<!– SQL方言,這邊設定的是MySQL –>
<property name=”dialect”>net.sf.hibernate.dialect.MySQLDialect</property>
<!– 一次讀的數據庫記錄數 –>
<property name=”jdbc.fetch_size”>50</property>
<!– 設定對數據庫進行批量刪除 –>
<property name=”jdbc.batch_size”>30</property>
<!–驅動程序–>
<property name=”connection.driver_class”>com.mysql.jdbc.Driver</property>
<!– JDBC URL –>
<property name=”connection.url”>jdbc:mysql://localhost/dbname?characterEncoding=gb2312</property>
<!– 數據庫用戶名–>
<property name=”connection.username”>root</property>
<!– 數據庫密碼–>
<property name=”connection.password”>root</property>
<!—映射文件 –>
<mapping resource=”com/amigo/pojo/User.hbm.xml”/>
<mapping resource=”com/amigo/pojo/Org.hbm.xml”/>
</session-factory>
</hibernate-configuration>

 

上面使用的驅動類是com.mysql.jdbc.Driver。需要將MySql的連接器jar包(eg. mysql-connector-java-5.0.4-bin.jar)加入到classpath中。
6. Sql Server連接配置
本小節講述一下Sql Server數據庫的hibernate連接設置,在此只給出連接部分的內容,其余部分與2.2.1.5一樣,在此不再贅述。內容如下:
<!–驅動程序–>
<property name=”connection.driver_class”>net.sourceforge.jtds.jdbc.Driver</property>
<!– JDBC URL –>
<property name=”connection.url”>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=dbname</property>
<!– 數據庫用戶名–>
<property name=”connection.username”>sa</property>
<!– 數據庫密碼–>
<property name=”connection.password”></property>

 

上例的驅動類使用的是jtds的驅動類,因此讀者需要將jtds的jar包(eg. jtds-1.2.jar)加入到classpath中。
7. Oracle連接配置
來源:http://www.blogjava.net/amigoxie/archive/2007/12/29/171395.html
本小節講述一下Sql Server數據庫的hibernate連接設置,在此只給出連接部分的內容,其余部分與2.2.1.5一樣,在此不再贅述。內容如下:
<!–驅動程序–>
<property name=”connection.driver_class”>oracle.jdbc.driver.OracleDriver</property>
<!– JDBC URL –>
<property name=”connection.url”>jdbc:oracle:thin:@localhost:1521:dbname</property>
<!– 數據庫用戶名–>
<property name=”connection.username”>test</property>
<!– 數據庫密碼–>
<property name=”connection.password”>test</property>

 

上例使用的驅動類為:oracle.jdbc.driver.OracleDriver,開發人員需要將相關的jar包(ojdbc14.jar)加入到classpath中。
二、hibernate配置屬性
來源:http://blog.csdn.net/wxytx88/archive/2009/03/26/4027216.aspx
表 3.3.  Hibernate配置屬性
屬性名  用途
hibernate.dialect  一個Hibernate Dialect類名允許Hibernate針對特定的關系數據庫生成優化的SQL.
取值 full.classname.of.Dialect
hibernate.show_sql  輸出所有SQL語句到控制台. 有一個另外的選擇是把org.hibernate.SQL這個log category設為debug。
eg. true | false
hibernate.format_sql  在log和console中打印出更漂亮的SQL。
取值 true | false
hibernate.default_schema  在生成的SQL中, 將給定的schema/tablespace附加於非全限定名的表名上.
取值 SCHEMA_NAME
hibernate.default_catalog  在生成的SQL中, 將給定的catalog附加於非全限定名的表名上.
取值 CATALOG_NAME
hibernate.session_factory_name  SessionFactory創建后,將自動使用這個名字綁定到JNDI中.
取值 jndi/composite/name
hibernate.max_fetch_depth  為單向關聯(一對一, 多對一)的外連接抓取(outer join fetch)樹設置最大深度. 值為0意味着將關閉默認的外連接抓取.
取值 建議在0到3之間取值
hibernate.default_batch_fetch_size  為Hibernate關聯的批量抓取設置默認數量.
取值 建議的取值為4, 8, 和16
hibernate.default_entity_mode  為由這個SessionFactory打開的所有Session指定默認的實體表現模式.
取值 dynamic-map, dom4j, pojo
hibernate.order_updates  強制Hibernate按照被更新數據的主鍵,為SQL更新排序。這么做將減少在高並發系統中事務的死鎖。
取值 true | false
hibernate.generate_statistics  如果開啟, Hibernate將收集有助於性能調節的統計數據.
取值 true | false
hibernate.use_identifer_rollback  如果開啟, 在對象被刪除時生成的標識屬性將被重設為默認值.
取值 true | false
hibernate.use_sql_comments  如果開啟, Hibernate將在SQL中生成有助於調試的注釋信息, 默認值為false.
取值 true | false

 

表 3.4.  Hibernate JDBC和連接(connection)屬性
屬性名  用途
hibernate.jdbc.fetch_size  非零值,指定JDBC抓取數量的大小 (調用Statement.setFetchSize()).
hibernate.jdbc.batch_size  非零值,允許Hibernate使用JDBC2的批量更新.
取值 建議取5到30之間的值
hibernate.jdbc.batch_versioned_data  如果你想讓你的JDBC驅動從executeBatch()返回正確的行計數 , 那么將此屬性設為true(開啟這個選項通常是安全的). 同時,Hibernate將為自動版本化的數據使用批量DML. 默認值為false.
eg. true | false
hibernate.jdbc.factory_class  選擇一個自定義的Batcher. 多數應用程序不需要這個配置屬性.
eg. classname.of.Batcher
hibernate.jdbc.use_scrollable_resultset  允許Hibernate使用JDBC2的可滾動結果集. 只有在使用用戶提供的JDBC連接時,這個選項才是必要的, 否則Hibernate會使用連接的元數據.
取值 true | false
hibernate.jdbc.use_streams_for_binary  在JDBC讀寫binary (二進制)或serializable (可序列化) 的類型時使用流(stream)(系統級屬性).
取值 true | false
hibernate.jdbc.use_get_generated_keys  在數據插入數據庫之后,允許使用JDBC3 PreparedStatement.getGeneratedKeys() 來獲取數據庫生成的key(鍵)。需要JDBC3+驅動和JRE1.4+, 如果你的數據庫驅動在使用Hibernate的標 識生成器時遇到問題,請將此值設為false. 默認情況下將使用連接的元數據來判定驅動的能力.
取值 true|false
hibernate.connection.provider_class  自定義ConnectionProvider的類名, 此類用來向Hibernate提供JDBC連接.
取值 classname.of.ConnectionProvider
hibernate.connection.isolation  設置JDBC事務隔離級別. 查看java.sql.Connection來了解各個值的具體意義, 但請注意多數數據庫都不支持所有的隔離級別.
取值 1, 2, 4, 8
hibernate.connection.autocommit  允許被緩存的JDBC連接開啟自動提交(autocommit) (不建議).
取值 true | false
hibernate.connection.release_mode  指定Hibernate在何時釋放JDBC連接. 默認情況下,直到Session被顯式關閉或被斷開連接時,才會釋放JDBC連接. 對於應用程序服務器的JTA數據源, 你應當使用after_statement, 這樣在每次JDBC調用后,都會主動的釋放連接. 對於非JTA的連接, 使用after_transaction在每個事務結束時釋放連接是合理的. auto將為JTA和CMT事務策略選擇after_statement, 為JDBC事務策略選擇after_transaction.
取值 auto (默認) | on_close | after_transaction | after_statement
注意,這些設置僅對通過SessionFactory.openSession得到的Session起作用。對於通過 SessionFactory.getCurrentSession得到的Session,所配置的CurrentSessionContext實現控制 這些Session的連接釋放模式。請參閱第 2.5 節 “上下文相關的(Contextual)Session”。
hibernate.connection.<propertyName>  將JDBC屬性propertyName傳遞到DriverManager.getConnection()中去.
hibernate.jndi.<propertyName>  將屬性propertyName傳遞到JNDI InitialContextFactory中去.

 

表 3.5.  Hibernate緩存屬性
屬性名  用途
hibernate.cache.provider_class  自定義的CacheProvider的類名.
取值 classname.of.CacheProvider
hibernate.cache.use_minimal_puts  以頻繁的讀操作為代價, 優化二級緩存來最小化寫操作. 在Hibernate3中,這個設置對的集群緩存非常有用, 對集群緩存的實現而言,默認是開啟的.
取值 true|false
hibernate.cache.use_query_cache  允許查詢緩存, 個別查詢仍然需要被設置為可緩存的.
取值 true|false
hibernate.cache.use_second_level_cache  能用來完全禁止使用二級緩存. 對那些在類的映射定義中指定<cache>的類,會默認開啟二級緩存.
取值 true|false
hibernate.cache.query_cache_factory  自定義實現QueryCache接口的類名, 默認為內建的StandardQueryCache.
取值 classname.of.QueryCache
hibernate.cache.region_prefix  二級緩存區域名的前綴.
取值 prefix
hibernate.cache.use_structured_entries  強制Hibernate以更人性化的格式將數據存入二級緩存.
取值 true|false

 

表 3.6.  Hibernate事務屬性
屬性名  用途
hibernate.transaction.factory_class  一個TransactionFactory的類名, 用於Hibernate Transaction API (默認為JDBCTransactionFactory).
取值 classname.of.TransactionFactory
jta.UserTransaction  一個JNDI名字,被JTATransactionFactory用來從應用服務器獲取JTA UserTransaction.
取值 jndi/composite/name
hibernate.transaction.manager_lookup_class  一個TransactionManagerLookup的類名 – 當使用JVM級緩存,或在JTA環境中使用hilo生成器的時候需要該類.
取值 classname.of.TransactionManagerLookup
hibernate.transaction.flush_before_completion  如果開啟, session在事務完成后將被自動清洗(flush)。 現在更好的方法是使用自動session上下文管理。請參見第 2.5 節 “上下文相關的(Contextual)Session”。
取值 true | false
hibernate.transaction.auto_close_session  如果開啟, session在事務完成后將被自動關閉。 現在更好的方法是使用自動session上下文管理。請參見第 2.5 節 “上下文相關的(Contextual)Session”。
取值 true | false

 

表 3.7.  其他屬性
屬性名  用途
hibernate.current_session_context_class  為”當前” Session指定一個(自定義的)策略。關於內置策略的詳情,請參見第 2.5 節 “上下文相關的(Contextual)Session” 。
eg. jta | thread | managed | custom.Class
hibernate.query.factory_class  選擇HQL解析器的實現.
取值 org.hibernate.hql.ast.ASTQueryTranslatorFactory or org.hibernate.hql.classic.ClassicQueryTranslatorFactory
hibernate.query.substitutions  將Hibernate查詢中的符號映射到SQL查詢中的符號 (符號可能是函數名或常量名字).
取值 hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC
hibernate.hbm2ddl.auto  在SessionFactory創建時,自動檢查數據庫結構,或者將數據庫schema的DDL導出到數據庫. 使用 create-drop時,在顯式關閉SessionFactory時,將drop掉數據庫schema.
取值 validate | update | create | create-drop
hibernate.cglib.use_reflection_optimizer  開啟CGLIB來替代運行時反射機制(系統級屬性). 反射機制有時在除錯時比較有用. 注意即使關閉這個優化, Hibernate還是需要CGLIB. 你不能在hibernate.cfg.xml中設置此屬性.
取值 true | false

 

3.4.1.  SQL方言
你應當總是為你的數據庫將hibernate.dialect屬性設置成正確的 org.hibernate.dialect.Dialect子類. 如果你指定一種方言, Hibernate將為上面列出的一些屬性使用合理的默認值, 為你省去了手工指定它們的功夫.
表 3.8.  Hibernate SQL方言 (hibernate.dialect)
RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
三、PO.hbm.xml屬性詳解
1. <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方法名
2. <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檢查約束
3. 用於控制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
4. 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程序負責生成.
5. <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 />
</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對象被稱為游離對象.
(注意:::::)持久化類與持久化對象是不同的概念.持久化類的實例可以處於臨時狀態,持久化狀態和游離狀態.其中處於
持久化狀態的實例 被稱為持久化狀態.
6. 臨時對象的特性:
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;                                                              結束生命周期               結束生命周期
7. 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
8.  Hibernate映射類型,對應的java基本類型及對應的標准SQL類型類型類型:
映射類型          java 類型                                                             標准 sql 類型
integer         int or Integer                                                           INTEGER
long long or java.lang.Long                                           BIGINT
short short or java.lang.Short                                        SMALLINT
float float or java.lang.Float                                            FLOAT
double double or java.lang.Double                                DOUBLE
big_decimal     java.math.BigDecimal                                         NUMERIC
character       java.lang.String                                                   CHAR(1)
string          java.lang.String                                                      VARCHAR
byte byte or java.lang.Byte                                            TINYINT
boolean boolean or java.lang.Boolean                              BIT
yes_no          boolean or java.lang.Boolean                          CHAR(1)(‘Y’ or ’N')
true_false      boolean or java.lang.Boolean                        CHAR(1)(‘Y’ or ’N')
date            java.util.Date or java.sql.Date                              DATE
time            java.util.Date or java.sql.Time                              TIME
timestamp       java.util.Date or java.sql.TimeStamp                TIMESTAMP
calendar        java.util.Calendar                                              TIMESTAMP
calendar_date   java.util.Calendar                                           DATE
binary          byte[]                                                               VARBINARY( or BLOB)
text            java.lang.String                                                 CLOB
serializable    java.io.Serializable                                        VARBINARY (or BLOB)
clob            java.sql.Clob                                                   CLOB
blob            java.sql.Blob                                                  BLOB
class java.lang.Class                                              VARCHAR
locale          java.util.Locale                                              VARCHAR
timezone        java.util.TimeZone                                      VARCHAR
currency        java.util.Currency                                           VARCHAR
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM