Java Votary
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
48 随笔 :: 1 文章 :: 80 评论 :: 0 Trackbacks
<
2005年12月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
Ajax(7)
(rss)
ASP模式(3)
(rss)
Java(17)
(rss)
Javascript(2)
(rss)
Ruby
(rss)
Rule Engine(6)
(rss)
SOA(2)
(rss)
Springframework(4)
(rss)
Web Service
(rss)
Web服务器(1)
(rss)
企业架构模式(2)
(rss)
杂项(2)
(rss)
设计模式
(rss)
随笔档案
2009年7月 (1)
2006年3月 (6)
2006年1月 (2)
2005年12月 (22)
2005年11月 (17)
文章档案
2005年11月 (1)
搜索
最新评论
1. re: Java Annotation入门
真心垃圾! 概念没讲清楚就开始讲解如何使用,这哪儿是入门? 这是浪费大家时间。
--路人甲
2. re: Java Annotation入门
不错
--bozhang
3. re: Java Annotation入门
这看完了能入门?运行原理都不说下
--DFX
4. re: Java Annotation入门[未登录]
翻译的不错
--a
5. re: Java Annotation入门
@c
翻译的太烂
--Somebodi
阅读排行榜
1. Java Annotation入门(58733)
2. 【转载】关于Java文件路径问题(31485)
3. 什么是Portlet ?(10040)
4. [收藏]如何获取客户端MAC地址(9755)
5. 解决JAVA服务器性能问题(5769)
评论排行榜
1. Java Annotation入门(39)
2. [转]我的Java学习之路(8)
3. 【转载】关于Java文件路径问题(8)
4. 什么是Portlet ?(5)
5. 在Java2平台企业版中应用异步JavaScript技术和XML(AJAX)(4)
【转载】hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
我是比较讨厌xml的人,没有强类型,很多配置出错,包括xdoclet都无法检查。刚好现在的主流框架总算开始支持annotation了,所以玩了一下配置,供参考:
hibernate3.05
hibernate-annotations-3.0beta2
spring1.21
几个配置文件如下:
spring-database.xml(这个文件基本不变,有新的dao在底下加入一行即可。
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
<!--
========================= RESOURCE DEFINITIONS =========================
-->
<
bean
id
="dataSource"
class
="org.apache.commons.dbcp.BasicDataSource"
destroy-method
="close"
>
<
property
name
="driverClassName"
><
value
>
${jdbc.driverClassName}
</
value
></
property
>
<
property
name
="url"
><
value
>
${jdbc.url}
</
value
></
property
>
<
property
name
="username"
><
value
>
${jdbc.username}
</
value
></
property
>
<
property
name
="password"
><
value
>
${jdbc.password}
</
value
></
property
>
</
bean
>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configurationClass"
><
value
>
org.hibernate.cfg.AnnotationConfiguration
</
value
></
property
>
<
property
name
="dataSource"
><
ref
bean
="dataSource"
/></
property
>
<
property
name
="configLocation"
><
value
>
/hibernate.cfg.xml
</
value
></
property
>
</
bean
>
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<
property
name
="sessionFactory"
><
ref
bean
="sessionFactory"
/></
property
>
<
property
name
="dataSource"
><
ref
bean
="dataSource"
/></
property
>
</
bean
>
<
bean
class
="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
/>
<
bean
class
="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"
>
<
property
name
="transactionInterceptor"
><
ref
bean
="transactionInterceptor"
/></
property
>
</
bean
>
<
bean
id
="transactionInterceptor"
class
="org.springframework.transaction.interceptor.TransactionInterceptor"
>
<
property
name
="transactionManager"
><
ref
bean
="transactionManager"
/></
property
>
<
property
name
="transactionAttributeSource"
>
<
bean
class
="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"
/>
</
property
>
</
bean
>
<!--
========================= DAO DEFINITIONS =========================
-->
<
bean
id
="testDao"
class
="org.steeven.TestDaoImpl"
>
<
property
name
="sessionFactory"
>
<
ref
bean
="sessionFactory"
/>
</
property
>
</
bean
>
<!--
========================= DAO DEFINITIONS =========================
-->
<bean id="mitService" class="org.steeven.TestServiceImpl"></bean>
</
beans
>
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
>
<
property
name
="hibernate.hbm2ddl.auto"
>
create-drop
</
property
>
<
property
name
="hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
property
>
<
property
name
="hibernate.cglib.use_reflection_optimizer"
>
true
</
property
>
<
property
name
="default-lazy"
>
false
</
property
>
<!--
用于hibernate持久化的对象"
-->
<
mapping
class
="org.steeven.Test"
/>
<
listener
type
="pre-update"
class
="org.hibernate.validator.event.ValidatePreUpdateEventListener"
/>
<
listener
type
="pre-insert"
class
="org.hibernate.validator.event.ValidatePreInsertEventListener"
/>
</
session-factory
>
</
hibernate-configuration
>
上面两个就是配置文件的全部了。下面看看代码:
TestDao.java(注意,就是个普通的dao,事务控制由调用者标注)
public
class
TestDaoImpl extends HibernateDaoSupport implements TestDao
{
public
void
save(Test
data)
{
getHibernateTemplate().saveOrUpdateAll(Arrays.asList(data));
}
}
Test.java
@Entity
@Proxy(lazy
=
false
)
public
class
Test
{
int
id;
String name;
Map
<
String, String
>
properties;
@Column(length
=
100
)
public
String getName()
{
return
name;
}
public
void
setName(String name)
{
this
.name
=
name;
}
@Id(generate
=
GeneratorType.AUTO)
public
int
getId()
{
return
id;
}
public
void
setId(
int
id)
{
this
.id
=
id;
}
@Transient
public
String getNotStoredProp()
{
return
null
;
}
@Type(type
=
"
org.steeven.database.MapUserType
"
)
@Column(name
=
"
properties
"
, length
=
1000
)
//
Map暂时不被支持,自己持久化到一个大字段
public
Map
<
String, String
>
getProperties()
{
return
properties;
}
public
void
setProperties(Map
<
String, String
>
properties)
{
this
.properties
=
properties;
}
}
TestServiceImpl.java(这个类也是从spring中取得,关键就在@Transactional标记)
@Transactional
public
class
TestServiceImpl implements TestService
{
public
void
save(Test
data)
{
TestDao dao
=
(TestDao)ServiceLocator.getInstance().getBean(
"
testDao
"
);
dao.save(data[
0
]);
if
(
true
)
throw
new
RuntimeException();
//
看看数据库是不是什么都没有?!
dao.save(data[
1
]);
}
}
现在很清爽了,所有的事务控制只需要加几个@Transaction标记。感谢hibernate+spring
另外,hibernate还提供了基于标记的参数校验,请参考下面文档:
参考资源:
spring1.21自带smaples/jpetstore
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/
posted on 2005-12-13 23:32
Dion
阅读(2255)
评论(2)
编辑
收藏
所属分类:
Springframework
评论
#
re: 【转载】hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
2005-12-16 18:17
jess
safd
回复
更多评论
#
re: 【转载】hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
2006-08-14 13:20
westzq
我照着你的写了个为什么不能实现事务?
hibernate.cfg.xml中的
<listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>
<listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/>
需要什么特殊配置吗?
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
在SPRING中实现事务暂停
【转载】Spring中使用Annotation同时标记JMS+数据库事务
【转载】hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
扩展 Spring 的 JMX 支持
Powered by:
BlogJava
Copyright © Dion