zoukankan      html  css  js  c++  java
  • 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
     
     
  • 相关阅读:
    MySQL之ERROR 1558 (HY000): Column count of mysql.user is wrong.解决方案
    手动发布本地jar包到Nexus私服
    Git的常用命令
    手游录屏直播技术详解 | 直播 SDK 性能优化实践
    【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
    【容器云】传统金融企业的 Docker 实践
    直播推流端弱网优化策略 | 直播 SDK 性能优化实践
    云存储之覆盖上传——七牛云
    「视频直播技术详解」系列之七:直播云 SDK 性能测试模型
    「视频直播技术详解」系列之六:现代播放器原理
  • 原文地址:https://www.cnblogs.com/wuxu/p/11167895.html
Copyright © 2011-2022 走看看