.net 专家

住在上海

hibernate 的自动生成工具

class, mapping file and DDL

1. Middlegen

是用来从DB中已存在的表,生成相应的mapping file. 可以下载一个老外的middlegen的例子。

http://sourceforge.net/project/showfiles.php?group_id=40712

调用Middlegen很简单,例子中的middlegen自动生成ant指令如下

<middlegen
         appname="${name}"
         prefsdir="${src.dir}"
         gui="${gui}"
         databaseurl="${database.url}"
         initialContextFactory="${java.naming.factory.initial}"
         providerURL="${java.naming.provider.url}"
         datasourceJNDIName="${datasource.jndi.name}"
         driver="${database.driver}"
         username="${database.userid}"
         password="${database.password}"
         
      >
     <hibernate
            destination="${build.gen-src.dir}"
            package="${name}.hibernate"
      />
  </middlegen>

然后会有一个GUI,给我们专门设计各种表与表之间的关系(一对一,一对多以及单向双向关系)。需要说明的是,middlegen生成的代码没有直接写mapping file灵活性好,所以生成的mapping file有时还需要我们去修改。

2. XDoclet

它是用来从java文件自动生成hbm文件的,不过我们需要在java代码中写一些规定的tag,才能得到自动生成的hbm文件.

<hibernatedoclet
          destdir="src"
          excludedtags="@version,@author,@todo"
          force="true"
          verbose="true">
          <fileset dir="src">
              <include name="**/*.java"/>
              <exclude name="**/Product.java"/>
          </fileset>
          <hibernate version="2.0"/>
    </hibernatedoclet>

3. hbm2java

它是用来从mapping 文件生成java代码的工具,调用很简单,在参数中需要给出所有的hbm文件,如下:

<java classname="net.sf.hibernate.tool.hbm2java.CodeGenerator" fork="true">
      <classpath refid="classpath"/>
      <arg line="${build.gen-src.dir}/airline/hibernate/*.hbm.xml"/>
    </java>

4. Schema Export

如果写好了java文件和hbm文件,就可以用SchemaExport直接生成DDL文件,调用同样简单,只需在java代码中,加入如下:

     conf = new Configuration()
          .addClass(a.class)
          .addClass(b.class);
     SchemaExport dbExport = new SchemaExport(conf);
     dbExport.setOutputFile("myschema.sql");
     dbExport.create(true, true);

从这四种自动生成工具来看, mapping file, java file and DDL,只要知道任何一种文件,都可以得到另外两种文件,

如:

1. 只有mapping file:

mapping file---hbm2java----java---SchemaExport----DDL

2.只有DDL

DDL---Middlegen---hbm----hbm2java----java

3.只有Java

java---XDoclet---hbm----SchemaExport----DDL

从这里,大家也可以体会到, Hibernate强大的灵活性。

posted on 2005-04-29 12:18 bobomail 阅读(6595) 评论(43)  编辑 收藏 网摘

评论

#1楼  2005-04-30 16:43 caravarn [未注册用户]

大内高手

Java到.NET的转换利器——JLCA

JLCA(Java Language Conversion Assistant)是VS.NET中内置的一套Java语言到.NET语言的转换工具,对于有这样需求的开发团队而言,这是一篇不可不读的文章。

OptimalJ实现MDA的实践

OptimalJ是另一个重量级的MDA工具。虽然OptimalJ目前只支持Java的MDA变换,但是其独树一帜的设计思想,仍然值得我们好好学习。

  回复  引用    

#2楼  2005-08-10 14:11 bobo [未注册用户]

一个不错的德jsp 分页工具的讨论
http://www.md.jxufe.cn/blog1/more.asp?name=xiaohuakai&id=406   回复  引用    

#3楼  2005-08-10 14:48 bobo [未注册用户]

hibernate 分页工具的讨论
http://dev.csdn.net/develop/article/20/20764.shtm   回复  引用    

#4楼  2005-08-10 16:18 伯伯 [未注册用户]

hibernate 工具的介绍http://dev.csdn.net/article/71/71115.shtm   回复  引用    

#5楼  2005-08-11 14:51 caravarn [未注册用户]

MiddleGen 工具介绍
http://dev.csdn.net/develop/article/53/53412.shtm   回复  引用    

#6楼  2005-08-11 17:01 caravarn [未注册用户]

hibernate 库更新列表
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&amp;sort=desc   回复  引用    

#7楼  2005-08-15 18:10 caravarn [未注册用户]


常见错误:
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
如果出现这行错误说明你的xml配置文件有不规范的字符,检查下。

net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml


如果出现这行错误说明你的hibernate的XML配置文件有错

net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found


如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate\classes\hibernate\目录下,也就是跟Hello_Bean.class类文件一起。

net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean


如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。

net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。
  回复  引用    

#8楼  2005-08-15 18:56 caravarn [未注册用户]

调试出现 net.sf.hibernate.MappingException 很有可能是由于
类库文件没有找到,类库的版本不同,他的名字会不同 要重新配置 setenv.bat
类库的路径。
  回复  引用    

#9楼  2005-08-15 19:16 caravarn [未注册用户]

[ERROR] CodeGenerator - Error parsing XML: file:/C:/projects/hibernate/javasampl
e/(1) <org.xml.sax.SAXParseException: Document root element "title", must match
DOCTYPE root "null".>org.xml.sax.SAXParseException: Document root element "title
", must match DOCTYPE root "null".

生成文件的路径不对   回复  引用    

#10楼  2005-08-16 14:06 caravarn [未注册用户]

Middlegen 工具 Hibernate辅助工具的功能,方便开发   回复  引用    

#11楼  2005-08-16 14:06 caravarn [未注册用户]

http://www.matrix.org.cn/resource/article/1/1639_Hibernate-Script.html   回复  引用    

#12楼  2005-08-17 13:45 caravarn [未注册用户]

Middlegen工具 连接数据库把数据结构导为 hbm2.xml 文件
Middlegen-Hibernate-r5\config\database
mysql.xml 修改 数据库的连接文件

修改 Middlegen-Hibernate-r5\builder.xml 文件
<!ENTITY database SYSTEM "file:./config/database/mysql.xml">
执行ant 会出现 gui 的界面
  回复  引用    

#13楼  2005-08-17 16:15 caravarn [未注册用户]

hbm2java 配置 build.xml 文件

可以参考的文档
http://www.wnetw.com/jclub/technology/read.jsp?itemid=484
<property name="src.dir" value="src/java"/>
源文件路径

.........
........

.....
<taskdef name="hbm2java"
classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
classpathref="project.class.path"/>

<!-- Generate the java code for all mapping files in our source tree -->

<target name="codegen" description="Generate Java source from the O/R mapping files"> --任务名称
<echo message="运行 Hbm2Java 任务, 利用 hbm.xml 文件生成Java类文件"/>

<hbm2java output="${src.dir}"> -- 源文件目录
<fileset dir="${src.dir}">
<include name="**/*.hbm.xml"/> --输出目录
</fileset>
</hbm2java>
</target>

执行:
ant codegen


  回复  引用    

#14楼  2005-08-17 16:15 caravarn [未注册用户]

hbm2java 配置 build.xml 文件

可以参考的文档
http://www.wnetw.com/jclub/technology/read.jsp?itemid=484
<property name="src.dir" value="src/java"/>
源文件路径

.........
........

.....
<taskdef name="hbm2java"
classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
classpathref="project.class.path"/>

<!-- Generate the java code for all mapping files in our source tree -->

<target name="codegen" description="Generate Java source from the O/R mapping files"> --任务名称
<echo message="运行 Hbm2Java 任务, 利用 hbm.xml 文件生成Java类文件"/>

<hbm2java output="${src.dir}"> -- 源文件目录
<fileset dir="${src.dir}">
<include name="**/*.hbm.xml"/> --输出目录
</fileset>
</hbm2java>
</target>

执行:
ant codegen


  回复  引用    

#15楼  2005-08-24 17:05 caravarn [未注册用户]

代码自动生成工具介绍网站
http://blog.aspcool.com/tim/archive/2004/05/30/176.html   回复  引用    

#16楼  2005-08-24 17:15 caravarn [未注册用户]

自动生成业务层代码的介绍
Quick Code, Code Smith,Cool Coder
http://blog.aspcool.com/tim/archive/2005/08/08/2628.html

  回复  引用    

#17楼  2005-09-06 15:04 caravarn [未注册用户]

ddl2hbm 的方法已经被 Middlegen 取代
可以参考这篇文章

http://www.360doc.com/showWeb.aspx?ArticleID=4281&CategoryID=31   回复  引用    

#18楼  2005-09-07 15:43 caravarn [未注册用户]

有*.java 文件生成 hbm 文件
<property name="hbm_src.dir" value="src"/>

<target name="config" description="Generate hbm files">
<taskdef name="hibernatedoclet" classpathref="classpath.build"
classname="xdoclet.modules.hibernate.HibernateDocletTask"/>
<echo>+---------------------------------------------------+</echo>
<echo>| |</echo>
<echo>| java 2 hbm |</echo>
<echo>| |</echo>
<echo>+---------------------------------------------------+</echo>

<hibernatedoclet destDir="${hbm_src.dir}">
<fileset dir="${hbm_src.dir}">
<include name="**/*.java"/>
</fileset>
<hibernate version="2.1"/>
</hibernatedoclet>

</target>

java 文件 和 hbm 放在一个目录下

需要配置hibernate.cfg.xml

<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

<session-factory name="session">

<property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!-- local connection properties -->
<property name="hibernate.connection.url">
jdbc:oracle:thin:@192.168.1.239:1521:beecool
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">mailsys</property>
<property name="hibernate.connection.password">mailsys</property>


<property name="hibernate.show_sql">true</property>
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JDBCTransactionFactory
</property>

<property name="hibernate.use_outer_join">false</property>
<property name="hibernate.max_fetch_depth">0</property>

<property name="hibernate.jdbc.fetch_size">100</property>
<property name="hibernate.jdbc.batch_size">100</property>
<property name="hibernate.jdbc.use_streams_for_binary">true</property>

<property name="hibernate.cglib.use_reflection_optimizer">true</property>
<mapping resource="cn/sh/online/dreamtree/model/Blessing.hbm.xml" />
<mapping resource="cn/sh/online/dreamtree/model/Prize.hbm.xml" />
<mapping resource="cn/sh/online/dreamtree/model/Admin.hbm.xml" />
</session-factory>
</hibernate-configuration>


java 和 hbm 文件的命名空间要一致
  回复  引用    

#19楼  2005-09-07 15:51 caravarn [未注册用户]

hbm 和 class 文件输出 *.sql 文件

<property name="build.dir" location="WebRoot/WEB-INF/classes"/>
<target name="schemaexport">
<taskdef name="schemaexport" classpathref="classpath.build"
classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask" />
<schemaexport
properties="${build.dir}/hibernate.properties"
quiet="no"
text="yes"
drop="no"
delimiter=";"
output="schema-export.sql">
<fileset dir="${build.dir}">
<include name="**/*.hbm.xml"/>
</fileset>
</schemaexport>

</target>

源目录要选择 classes hbm 和 class 文件

全部编译

<path id="classpath.build">
<fileset dir="hibernate-lib"/>
hibernate-lib 类库
<fileset dir="xdoclet-lib"/>
</path>



<target name="java" description="Compile Java">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.java}"
destdir="${build.dir}"
classpathref="classpath.build"
debug="true"/>

<copy todir="${build.dir}">
<fileset dir="${src.java}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>



  回复  引用    

#20楼  2005-09-07 16:34 caravarn [未注册用户]

hibernate.cfg.xml

指定生成的数据库
<property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</property>
<property name="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialect</property>   回复  引用    

#21楼  2005-09-08 14:35 caravarn [未注册用户]

oracle 包驱动
oracle.jdbc.driver.OracleDriver   回复  引用    

#22楼  2005-09-08 16:16 caravarn [未注册用户]

net.sf.hibernate.util.JDBCExceptionReporter

No suitable driver

是由于数据库的hsql 语句有问题
  回复  引用    

#23楼  2005-09-09 12:35 caravarn [未注册用户]

jbuilder 执行程序 调用的是 classes 目录下的程序
所以要先builder 一下
  回复  引用    

#24楼  2005-09-09 14:21 caravarn [未注册用户]

所以要 copy hbm 文件到 classes 目录下面   回复  引用    

#25楼  2005-09-09 14:26 caravarn [未注册用户]

No suitable driver 引起的原因 数据库连接失败
在classes 查找 hibernate.cfg.xml 文件
<property name="hibernate.connection.url">
jdbc:oracle:thin:@192.168.1.239:1521:beecool
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>   回复  引用    

#26楼  2005-09-13 18:15 bobo [未注册用户]

hibernate 开发 自动主建会碰到的问题

http://forum.javaeye.com/viewtopic.php?t=3387&postdays=0&postorder=asc&start=0   回复  引用    

#27楼  2005-09-19 19:24 bobo [未注册用户]

主码自动生成
<id
name="announceid"
type="int"
column="ANNOUNCEID"
>
<generator class="vm" />
</id>   回复  引用    

#28楼  2005-12-20 09:06 b [未注册用户]

Ant 的概念:

Ant 語法採用 XML 的格式。XML非常適合用來表達多階層的樹狀資料結構。Ant 的語法也承襲了這個優點。

要讓 Ant 來自動化我們的工作,我們就必須在專案的目錄中,撰寫 build.xml。

當然你可以使用其他的檔案名稱,如果使用其他檔名,就必須在命令列指定這個檔名。
假設檔名為abc.xml,命令列就必須改成:


ant -buildfile abc.xml。

build.xml 基本的結構,包含了一個文件的根節點:project;至少一個 target 節點;target節點裡再包含 task 節點來指定 Ant 所要執行的任務。視情況需要,還可以使用 property 節點,來定義 Ant 的變數。以下,分別介紹每個節點的功用。


--------------------------------------------------------------------------------

project 節點:

project 節點是 build.xml 的文件根節點。一個文件之中,只能有一個根節點。project 節點有以下三個屬性。

屬性 說明 是否必要
name 專案名稱 No
default 假設命令列未指定 target 時,預設執行的 target 節點 Yes.
basedir 用來指定專案的根目錄,這個屬性可以使用"basedir" property 節點來改變,如果定義 basedir的 property 節點,在 project 標籤中,就不可以定義這個屬性。假使未使用這個屬性或 property 節點來定義 basedir的話,則 Ant 會使用這個專案 build.xml 的目錄,作為 basedir。 No



--------------------------------------------------------------------------------

target 節點:

target 節點是 Ant 執行的目標,我們可以把各種命令(在 Ant 中的術語,叫任務 task),放在 target 的節點中。所以,你可以把他想成是一組命令的結合,以程式設計來說,接近副程式或不傳回值的函式。

target 和 target 之間,可以使用 depends屬性來定義彼此間的依存關係。藉由定義這些依存的關係,我們可以改變 target 的執行順序。也可以定義 if 以及 unless 屬性,來決定是否執行這個 target 節點的工作。沒有定義 if 和 unless 屬性的 target 節點,一定會按照順序執行。

屬性 說明 是否必要
name target 的名稱 Yes
depends 在執行這個 target 節點之前,先要執行其他節點的名稱。如果是多個節點時,以逗號區隔各個節點。 No
if 指定 property 名稱。必須定義這個 property ,才會執行這個 target的工作。 No
unless 指定 property 名稱。必須不定義這個 property ,才會執行這個 target的工作。 No
description 文字說明 No



--------------------------------------------------------------------------------

task 節點:

task 節點,是 Ant 執行工作最基本的單位,類似程式設計中的命令句。可分為 core tasks 和 optional tasks 兩類,你也可以使用 java 來撰寫自定的 task。

task 的範圍很廣,各個屬性也不相同,要運用 task時,可參考 Ant 的線上說明。


--------------------------------------------------------------------------------

property 節點:

property 節點,定義專案的屬性值,類似程式設計中的變數。最常用的屬性有 name 和 value。name 定義這個 property 的名稱,value 定義這個property 的值。要讀取 property 的值時,必須使用 ${property名稱}的格式。

範例:

<project name="ex" default="hello">

<property name="who" value="Bush"/>

<task name="hello">

<echo message="Hello, ${who} "/>

</task>

</project>

  回复  引用    

#29楼  2005-12-20 09:06 b [未注册用户]

實例演練:使用 Ant 上傳檔案

我們在開發應用程式時,常常面臨需要處理很多繁瑣的工作。使用 Ant 可以幫助我們簡化這個過程。在使用 Ant 之前,你必須要先知道,你所要處理的工作有哪些。

以上個課程為例,我們要把寫完的 PHP 網頁程式,上傳到伺服器。上傳檔案這種瑣事,就可以交給 Ant 來處理。一般來說,應該是以FTP工具來執行上傳的工作,Ant 裡面所使用的 FTP task 功能不夠強大,在初次上傳的情況還好,但是,在開發過程當中,常常需要不時的更新上傳,Ant 的 FTP task 就容易因為目錄權限的問題,發生無法執行的錯誤。為了避免這個困擾,我們可以在開發測試的主機中,安裝 Samba,然後,在你的 windows 機器上,建立連線磁碟機,使用 Ant 的 copy task ,就可以解決這個問題。



準備工作:

在桌面上的網路上的芳鄰,按右滑鼠鍵,在選單中選擇連線網路磁碟機。指定磁碟機的名稱為 F:,路徑欄輸入\\主機名稱或 IP\帳號,如:\\libdns.lib.ncyu.edu.tw\lib13。然後,輸入帳號和密碼。這樣,在你的機器上,就有一台網路磁碟機了。

撰寫 build.xml:

進入到你的 115 資料夾之內,使用 editplus,產生一個 build.xml 檔案。

內容如下:

<project name="115" default="upload"> <property name="dest_drive" value="F:\" /> <property name="dest_dir" value="${dest_drive}\public_html\115" />

<target name="create_dir">
<mkdir dir="${dest_dir}" />
</target>

<target name="upload" depends="create_dir">
<copy todir="${dest_dir}">
<fileset dir=".">
<exclude name="**\build.xml"/>
</fileset>
</copy>
</target>

</project>

執行 Ant 程式:

進入 DOS 命令列,cd 到 115資料夾,然後,在命令提示下,打 ant 按 enter 鍵。

  回复  引用    

#30楼  2005-12-20 09:07 v [未注册用户]

實例演練:使用 Ant 存取資料庫

<project name="main" default="getdata"> <property name="host" value="libdns.lib.ncyu.edu.tw" /> <property name="database" value="lib13" /> <property name="userid" value="lib13" /> <property name="password" value="password" /> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://${host}/${database}" />

<target name="create_database">
<sql
driver="${driver}"
url="${url}"
userid="${userid}"
password="${password}"
src="lib13.sql"
encoding="iso-8859-1"
/>
</target>
<target name="getdata" depends="create_database">
<sql
driver="${driver}"
url="${url}"
userid="${userid}"
password="${password}"
showheaders="true"
print="true"
encoding="iso-8859-1">
select id, name from Guestbook
</sql>
</target>
</project>


  回复  引用    

#31楼  2005-12-28 16:23 bbv [未注册用户]

ant 课程

java.sql.SQLException: Io 异常: The Network Adapter could not e

数据库 连接 驱动 出错


ant 的 部署
http://www.matrix.org.cn/resource/article/43/43742_Ant_Web.html   回复  引用    

#32楼  2006-01-09 12:05 bobobb [未注册用户]

File file = new File("dreamtree.cfg.xml");
// File file = new File(".");
System.out.println(file.getPath());
conf = new Configuration().configure(file);


获得的当前目录在 web_info\classes\ 目录下面   回复  引用    

#33楼  2006-01-16 12:48 b0 [未注册用户]

http://www.chixin.com.cn/study/Hibernate入门.doc   回复  引用    

#34楼  2006-01-16 12:56 b0 [未注册用户]

hiberate 数据库的基础配置
http://forum.javaeye.com/viewtopic.php?t=257&postdays=0&postorder=asc&start=0
Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。例如一次查询1万条记录,对于Oracle的JDBC驱动来说,是不会1次性把1万条取出来的,而只会取出Fetch Size条数,当纪录集遍历完了这些记录以后,再去数据库取Fetch Size条数据。因此大大节省了无谓的内存消耗。当然Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。这有点像平时我们写程序写硬盘文件一样,设立一个Buffer,每次写入Buffer,等Buffer满了以后,一次写入硬盘,道理相同。

Oracle数据库的JDBC驱动默认的Fetch Size=10,是一个非常保守的设定,根据我的测试,当Fetch Size=50的时候,性能会提升1倍之多,当Fetch Size=100,性能还能继续提升20%,Fetch Size继续增大,性能提升的就不显著了。因此我建议使用Oracle的一定要将Fetch Size设到50。

不过并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。MySQL就像我上面说的那种最坏的情况,他总是一下就把1万条记录完全取出来,内存消耗会非常非常惊人!这个情况就没有什么好办法了

Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。我做的一个测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,删除仅仅需要5秒!!! 可见有多么大的性能提升!很多人做Hibernate和JDBC的插入性能测试会奇怪的发现Hibernate速度至少是JDBC的两倍,就是因为Hibernate使用了Batch Insert,而他们写的JDBC没有使用Batch的缘故。以我的经验来看,Oracle数据库 Batch Size = 30 的时候比较合适,50也不错,性能会继续提升,50以上,性能提升的非常微弱,反而消耗内存更加多,就没有必要了。   回复  引用    

#35楼  2006-01-16 15:05 bobob [未注册用户]

hibernate 如何解决死锁的
http://www.javafan.net/article/20050814100024212.html

  回复  引用    

#36楼  2006-01-16 15:20 bobb [未注册用户]

pc 机 用 java 服务器 一般同时在线 1000人左右   回复  引用    

#37楼  2006-01-16 15:23 b [未注册用户]

解决死锁
http://www.blogjava.net/jinfeng_wang/archive/2005/04/07/2916.aspx   回复  引用    

#38楼  2006-01-18 16:20 b [未注册用户]

list 在 空的时候 list.get(0) 错误 造成 weblogic 的系统 挂起
  回复  引用    

#39楼  2006-02-09 10:22 ff [未注册用户]

hibernate 阅读资料
这里要注意的是,在sessionFactory.openSession()中,hibernate会初始化
数据库连接,与此同时,将其AutoCommit 设为关闭状态(false)。而其后,在
Session.beginTransaction 方法中,Hibernate 会再次确认Connection 的
AutoCommit 属性被设为关闭状态( 为了防止用户代码对session 的
Connection.AutoCommit属性进行修改)。
这也就是说,我们一开始从SessionFactory获得的session,其自动提交属性就
已经被关闭(AutoCommit=false),下面的代码将不会对数据库产生任何效果:
session = sessionFactory.openSession();
session.save(user);
session.close();
这实际上相当于 JDBC Connection的AutoCommit属性被设为false,执行了若
干JDBC操作之后,没有调用commit操作即将Connection关闭。
如果要使代码真正作用到数据库,我们必须显式的调用Transaction指令:
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();   回复  引用    

#40楼  2006-02-10 15:19 b [未注册用户]

hibernate 并发控制的问题
在和数据库进行交互时,Hibernate把捕获的SQLException封装为Hibernate的 JDBCException。事实上,Hibernate尝试把异常转换为更有实际含义 的JDBCException异常的子类。底层的SQLException可以 通过JDBCException.getCause()来得到。Hibernate通过使用关联到 SessionFactory上的SQLExceptionConverter来 把SQLException转换为一个对应的JDBCException 异常的子类。默认情况下,SQLExceptionConverter可以通过配置dialect 选项指定;此外,也可以使用用户自定义的实现类(参考javadocs SQLExceptionConverterFactory类来了解详情)。标准的 JDBCException子类型是:

JDBCConnectionException - 指明底层的JDBC通讯出现错误

SQLGrammarException - 指明发送的SQL语句的语法或者格式错误

ConstraintViolationException - 指明某种类型的约束违例错误

LockAcquisitionException - 指明了在执行请求操作时,获取 所需的锁级别时出现的错误。

GenericJDBCException - 不属于任何其他种类的原生异常

引用
http://www.huihoo.com/framework/hibernate/reference-v3_zh-cn/transactions.html   回复  引用    

#41楼  2006-02-24 17:46 bobo456 [未注册用户]

http://www.hibernate.org/hib_docs/reference/zh-cn/html_single/
hibernate 学习资料   回复  引用    

#42楼  2006-02-24 18:10 bobo456 [未注册用户]

java 的 static 变量并发 变量访问问题 静态变量访问问题
http://tonng.blogchina.com/
http://lixianhuei.cnblogs.com/archive/2005/08/31/227274.aspx   回复  引用    

#43楼  2006-03-10 18:27 bobo456 [未注册用户]

事务和并发
http://www.huihoo.com/framework/hibernate/reference-v3_zh-cn/transactions.html   回复  引用    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索
[推荐职位]上海盛大网络招聘架构师

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: