class="org.springframework.orm.hibernate.HibernateTransactionManager"> class="org.springframework.transaction.interceptor.TransactionProxyFactory" /> 当 Hibernate 遇上 Spring (2)::IT决策网
您的位置:首页>软件开发>软件架构>

当 Hibernate 遇上 Spring (2)

[ 来源:IBM | 更新日期:2007-7-15 20:16:59 | 评论 0 条 | 我要投稿 ]
清单 2. 将应用程序 DAO 和 TransactionManager 编写在一起


class="springexample.hibernate.CustomerDAOImpl">




class="org.springframework.orm.hibernate.HibernateTransactionManager">





class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">






PROPAGATION_REQUIRED




   在 清单 2 的这个示例中,CustomerDAOImpl 类的 addCustomer 方法是作为事务的一部分执行的,有一个事务属性 PROPAGATION_REQUIRED。这个属性等价于 EJB 容器的 TX_REQUIRED。如果想让这个方法一直在事务中运行,可以使用 PROPAGATION_REQUIRED。如果事务已经在运行,那么 bean 方法会加入事务,否则 Spring 的轻量级事务管理器会启动一个事务。如果想在调用组件服务时总是启动新事务,可以使用 PROPAGATION_REQUIRES_NEW 属性。

字串6


  应用程序的连接完成之后,现在来进一步查看源代码。

  分析这个!

  如果以前没这么做过,那么请 下载这篇文章的源代码。把源 zip 文件释放到计算机中的任何位置上,例如 c:。会创建一个叫作 SpringProjectPart2 的文件夹。srcspring 文件夹包含示例应用程序的 Hibernate 映射文件和 Spring 配置文件。srcspringexamplehibernate 文件包含应用程序的源代码。

  在这里会发现两个类,即 Customer 和 Account,它们用 Hibernate 映射文件映射到两个表。Customer 类代表客户信息,Account 代表客户的帐户信息。正如前面提到的,我把这两个类按照 1: N 关系进行建模,即一个 Customer 可以拥有多个 Account。清单 3 显示了 Customer 对象的 Hibernate 映射文件。

  清单 3. Customer 对象的 Hibernate 映射文件



"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> 字串7


name="springexample.hibernate.Customer"
table="TBL_CUSTOMER"
dynamic-update="false"
dynamic-insert="false">

name="id"
column="CUSTOMER_ID"
type="java.lang.Long"
unsaved-value="-1"
>




inverse = "true"
cascade="all-delete-orphan">





name="email"
type="string"
update="false"
insert="true"
column="CUSTOMER_EMAIL" 字串6
length="82"
not-null="true"
/>

name="password"
type="string"
update="false"
insert="true"
column="CUSTOMER_PASSWORD"
length="10"
not-null="true"
/>

name="userId"
type="string"
update="false"
insert="true"
column="CUSTOMER_USERID"
length="12"
not-null="true"
unique="true"
/>

name="firstName"
type="string"
update="false" 字串6
insert="true"
column="CUSTOMER_FIRSTNAME"
length="25"
not-null="true"
/>

name="lastName"
type="string"
update="false"
insert="true"
column="CUSTOMER_LASTTNAME"
length="25"
not-null="true"
/>





  set name="accounts" 和一对多类标签指定了 Customer 和 Account 之间的关系。我还在 Account.hbm.xml 文件中定义了 Account 对象的映射。

  CustomerDAOImpl.java 代表应用程序的 DAO,它在应用程序数据库中插入客户和帐户信息。CustomerDAOImpl 扩展了 Spring 的 HibernateDaoSupport,它用 Spring HibernateTemplate 简化了会话管理。这样,可以通过 getHibernateTemplate() 方法保存或检索数据。下面显示的 getCustomerAccountInfo() 对 Customer 进行 查找,通过 getHibernateTemplate().find 方法用 HQL 得到客户的帐户信息,如清单 4 所示。

字串7





Tags:
责任编辑:
您的评论
用户名: 新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为