发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA
1 2 3 4 ... 5 下一页 Go 5

欢迎参与Java 事务讨论

                   
2003-07-14 06:13
赞助商链接

*****************************
**JTA与JDBC中事务处理的区别**
*****************************
JTA(Java Transaction API) , 如begin(), commit()
JDBC中也有事务处理的API, 如begin(), commit()

两者都是控制事务的API, 不知它们有什么区别? 是不是底层实现相同?

****************************************
**另外,也谈谈我对CMP与Hibernate的理解**
****************************************
显然,CMP在处理复杂的查询时弱于Hibernate. CMP也没有动态查询。
但是,CMP在事务处理方面强于Hibernate, 原因是CMP与EJB容器结合,其CMT直接在Declarative transaction申明事务的类型,其它的事情交给EJB容器,代码量少,也容易维护。

*********************************************************
**在EJB中用hibernate代替CMP的可行性到底有多少?(好与坏)**
*********************************************************

2003-07-14 21:00

顶一顶. 不相信大家对此不感兴趣。

2003-07-14 21:54

先说一说hibernate:
在此之前大家对hibernate进行了很多讨论。由于我没有真正在项目中使用过hibernate,所以不敢乱说。但看了一些资料和使用hibernate的Sample后,我感觉使用hibernate并非会有根本性的好处(当然cmp也不是必须使用的)。
先列出2种后台层次结构:
1.一个使用hibernate的sample
sessionBean --> (domain object) -->DAO -->hibernate
2.我在上一个项目中使用的结构
sessionBean --> (domain object) -->DAO
比较上面2种结构,区别在于:
方式1在DAO中使用了hibernate进行persistence工作,实现对关系型数据库的操作;而我方式2中,是在DAO中使用jdbc直接操作关系数据库。

我的结论是:
1.方式1能做的事情,在方式2中都能做;而方式2能做的事情方式1不一定能胜任。例如在DAO优化方面,方式2要比方式1更灵活;

2.方式1在代码量方面不比方式2少。--实际上方式1需要维护的是o/r mapping 文件,而方式2可以通过代码生成工具方便地生成绝大部分代码

3.o/r mapping的概念,更应该是一个面向对象设计的原则。在实现的时候,直接在DAO使用JDBC操作数据库也是一种o/r 转换的做法。因此还是没有理由一定要使用hibernate。

说的片面之处,请各位指正.

2003-07-14 23:45

>>**JTA与JDBC中事务处理的区别**

去找本教科书看

>>CMP在事务处理方面强于Hibernate, 原因是CMP与EJB容器结合,其CMT直接在Declarative transaction申明事务的类型,其它的事情交给EJB容器,代码量少,也容易维护

澄清一个事实:Hibernate本身没有事务处理功能!

如果在Session Bean里面调用Hibernate,一样可以使用CMT。

CMP的代码量比Hibernate只多不少,可维护性更加是一场恶梦!不要凭空去想,实际做做项目你就知道了。

>>**在EJB中用hibernate代替CMP的可行性到底有多少?(好与坏)**

如果你觉得你可以用Session Bean + DAO + JDBC可以取代Session Bean + CMP,那么你就可以一样用Session Bean + DAO + Hibernate取代 Session Bean + CMP。

Hibernate只不过是JDBC的一个非常好用,非常简单的lightweight的对象封装框架而已,没有必要老是拿来和CMP做对比。凡是用JDBC的地方,你都可以用Hibernate,仅此而已。

2003-07-15 01:04

>>**在EJB中用hibernate代替CMP的可行性到底有多少?(好与坏)**


Hibernate的优点有很多,我相信前面的帖子已经讨论的够充分了。简单,易用,强大,灵活而且速度够快。

Hibernate的缺点从功能上来说,不适合处理批量update和delete(这也是ORM共同的缺点)。HQL只有select,没有update和delete。本来在HQL里面增加update和delete只不过是举手之劳而已。但是一旦在HQL里面增加update和delete,必须同步更新在JVM里面的persistent object,否则会造成persisent object的状态不一致的问题。这边厢数据库里面的记录已经被删除了,那边厢persistent object还在JVM里面好好的运行呢!

所以Gavin King建议批量update和delete使用JDBC,这也符合他的软件哲学,把95%的事情做到最好,剩下5%的瓶颈交给JDBC,“非不能也,是不为也”。

不过,实际上在一个面向用户交互的软件中,极少会遇到批量更新和批量删除的情况,即便遇到,批量处理的记录数也不会很多,一般用Hibernate处理也足够了。只有一些数据库后台维护程序会比较频繁的使用批量更新和批量删除,但对于这样的情况,直接使用数据库的C API更加符合要求。

另一个我曾经认为是Hibernate的缺点是不支持动态映射数据库表,不支持映射非表的其他数据库对象,当然这也是JDO,CMP同样的面临的问题。但我最近几天发现Hibernate完全可以做到。

在Hibernate中,persistent object通过XML Mapping文件映射到数据库表上,这样就不能动态映射不同的表,比如有时候会遇到根据不同的情况选择是从当前表还是从历史表中进行查询。不过persistent object通过XML Mapping文件也可以选择不映射数据库表,而是映射到一个Java class上,这样就可以自己编写一个ClassPersister,处理如何把persistent object和数据库进行数据映射。更进一步,通过该方法,也可以解决在Hibernate中调用Store procedure的问题。

说实话,从功能上就ORM这一点来说,我还没有发现Hibernate的缺点,大概是因为我对Hibernate研究还不够深入吧。

5Go 1 2 3 4 ... 5 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com