CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

现有需求:两个关联表A,B。当A中插入一条记录时,在B中插入多条记录,同时将A中的主键插入B中,如果B中插入操作失败时,A表回滚。在EJB

楼主saintKnight(saintKnight)2003-06-04 08:56:18 在 Java / J2EE / EJB / JMS 提问

现有需求:两个关联表A,B。当A中插入一条记录时,在B中插入多条记录,同时将A中的主键插入B中,如果B中插入操作失败时,A表回滚。在EJB中定义了两个EntityBean,在SessionBean中写了两个InsertA()、InsertB()方法(是分别针对两个关联表A,B的插入操作)。  
  public   boolean   insertA(){  
        ...  
        try{  
              entityBeanA.create(.....);  
              this.insertB();  
        }catch(Exception   exc)  
        {...}  
        ....  
  }  
  public   boolean   insertB(){  
        ...  
        try{  
              entityBeanB.create(.....);  
        }catch(Exception   exc)  
        {...}  
        ....  
  }  
  现在操作时发现如果B表操作失败时,表A中操作的数据没有回滚,仍然插入到表中。  
  请问这样的需求如何实现? 问题点数:20、回复次数:7Top

1 楼smilelee(smilelee)回复于 2003-06-04 09:04:09 得分 5

用Tx   jdbc   driver做连接,再做Tx   datasource。分布式事务必须用TxTop

2 楼zez(思恩 闭关练功ing...)回复于 2003-06-04 09:26:34 得分 5

试试sessinbean里加一个方法,  
  这个方法只是调用   inserta   和insertb  
   
  试试,我没做过...  
  好像事务是按方法的..  
   
  只是提示,还是看一下   文档   的好:)Top

3 楼saintKnight(saintKnight)回复于 2003-06-06 09:58:08 得分 0

upTop

4 楼saintKnight(saintKnight)回复于 2003-06-08 11:35:21 得分 0

upTop

5 楼dl1125(上班)回复于 2003-06-08 14:40:51 得分 5

weblogic   jat   可以达到你的要求!Top

6 楼wbnavy(海风)回复于 2003-06-08 14:56:44 得分 5

上面的问题没有把事务管理写进去,  
  public   UserTransaction   getUserTransaction()   throws   Exception{  
  UserTransaction   uT   =   null;  
  try{  
  uT   =   this.sessionContext.getUserTransaction();  
  int   status   =   uT.getStatus();  
  if   (   status   !=   javax.transaction.Status.STATUS_ACTIVE   )   {  
  uT.begin();  
  status   =   uT.getStatus();  
  }  
  }  
  catch   (   Exception   e   )   {  
  e.printStackTrace();  
  throw   new   ResourceRegisterException(e.getMessage());  
  }  
   
  return   (uT);  
  }  
   
  private   void   commit()   throws   Exception   {  
   
  try   {  
  if   (   userTransaction.getStatus()   ==   javax.transaction.Status.STATUS_NO_TRANSACTION   ){  
  throw   new   ResourceRegisterException("There   is   no   transaction   associated   with   this   thread");  
  }  
  if   (   userTransaction.getStatus()   ==   javax.transaction.Status.STATUS_ACTIVE   )   {  
  userTransaction.commit();  
  }  
  else   {  
  throw   new   ResourceRegisterException("User   Transaction   Timeout");  
  }  
  }  
  catch   (   Exception   e   )   {  
  e.printStackTrace();  
  throw   new   ResourceRegisterException(e.getMessage());  
  }  
  }  
   
  private   void   rollback()   throws   ResourceRegisterException   {  
  try{  
  userTransaction.rollback();  
  }  
  catch   (   Exception   e1   )   {  
  e1.printStackTrace();  
  throw   new   ResourceRegisterException(e1.getMessage());  
  }  
  }  
   
  把上面几个关于事务的方法加进去就行了。Top

7 楼saintKnight(saintKnight)回复于 2003-06-08 17:45:54 得分 0

加到哪里去?是不是直接加到所在的类中,不需要其他设置?Top

相关问题

  • a表和b表关联,我想找出和a关联的所有的b表的记录?
  • sql语句, 从表a,表b取数据,关联字段a.hh,b.hh, 关联字段a.hh,b.hh, 取a.hh,b表c字段,select a.hh,sum(b.c) from a,b where a.hh=b.hh gr
  • 表关联问题。
  • 多表关联update
  • Grid表的关联
  • 在查询的时候要关联好几张表,不只两张,是用from a,b,c where ....,还是用left join
  • 多表关联的区别:
  • 如何查询关联表?
  • 关于表的关联!
  • SQL2000的表间关联

关键词

  • 需求
  • 插入
  • 记录
  • insertb
  • resourceregisterexception
  • inserta
  • 操作
  • 关联表
  • usertransaction
  • ut

得分解答快速导航

  • 帖主:saintKnight
  • smilelee
  • zez
  • dl1125
  • wbnavy

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo